通用对象类型转换
我有一个对象,想将通用对象转换为类对象。我认为以下应该工作。但它没有:通用对象类型转换
Object o1=itr.next();
Class cls=o1.getClass();
Object obj=(cls) o1;
错误是什么?我怎样才能正确地做到这一点?
更新:在这里我有属于不同类的对象的列表。我将使用每个循环中的每个类转换为XML或JSON字符串。为此,我想获得它所属的类和对象。
你必须调用cast method的Class对象:
cls.cast(o1)
Thanks..its working ... – thecodejack 2012-03-02 06:41:20
这句法:
Object obj=(cls) o1;
是不允许的。您只能投射到类型和cls
是对象类型Class
,而不是类型本身。你想用这个完成什么?你也可以同样写:
Object obj = o1;
因为任何引用类型是赋值兼容Object
(和,除此之外,o1
已经Object
类型)。
所以无论如何到typecast ?? ..我不能直接指定类,因为它可以是一组类... – thecodejack 2012-03-02 06:39:49
@CodeJack:请编辑你的问题,以解释你是什么试图去做。 – Mat 2012-03-02 06:41:53
@CodeJack你正试图将'o1'转换为它的实际类型?你不能这么做,至少使用你给我们展示的代码片段。通常,'itr'是一个泛型类(即它有某种类型的参数),而type参数定义它返回的特定类型的对象。 – 2012-03-02 06:42:57
Object o1=itr.next();
Class cls=o1.getClass();
Object obj=(cls) o1; //whats does it make sense casting Object by object? o1 and obj both are object
,它可以通过类型T
,不类定投
确实如此,在Object类型的变量中引用Castted对象是没有意义的。但它对于调用方法很有用(这可能是OP想要做的):'cls.cast(o1).clsHasAMagicMethod()'。 – Koraktor 2012-03-02 06:42:56
@Koraktor如果'cls'是一些已知的类,这将是有意义的,但OP的代码会得到的唯一东西是另一个'Object',因为'cls'没有任何声明的泛型类型参数。 – 2012-03-02 06:51:13
@Koraktor id我们知道'clsHasAMagicMethod()'的名字,那么我们必须知道类,所以我们可以做更简单的'((classname)o1).clsHasAMagicMethod()' – 2012-03-02 06:53:22
如果你的迭代器返回,实际上是对象type Class this might work:
Object o1=itr.next();
Class clazz = (Class)o1;
说实话,你的问题对我来说不是很清楚。
你打算怎么处理这个 – Jayy 2012-03-02 06:39:01