2012-03-02 119 views
1

我有一个对象,想将通用对象转换为类对象。我认为以下应该工作。但它没有:通用对象类型转换

Object o1=itr.next(); 
Class cls=o1.getClass(); 
Object obj=(cls) o1; 

错误是什么?我怎样才能正确地做到这一点?

更新:在这里我有属于不同类的对象的列表。我将使用每个循环中的每个类转换为XML或JSON字符串。为此,我想获得它所属的类和对象。

+1

你打算怎么处理这个 – Jayy 2012-03-02 06:39:01

回答

3

这句法:

Object obj=(cls) o1; 

是不允许的。您只能投射到类型cls对象类型Class,而不是类型本身。你想用这个完成什么?你也可以同样写:

Object obj = o1; 

因为任何引用类型是赋值兼容Object(和,除此之外,o1已经Object类型)。

+0

所以无论如何到typecast ?? ..我不能直接指定类,因为它可以是一组类... – thecodejack 2012-03-02 06:39:49

+0

@CodeJack:请编辑你的问题,以解释你是什么试图去做。 – Mat 2012-03-02 06:41:53

+0

@CodeJack你正试图将'o1'转换为它的实际类型?你不能这么做,至少使用你给我们展示的代码片段。通常,'itr'是一个泛型类(即它有某种类型的参数),而type参数定义它返回的特定类型的对象。 – 2012-03-02 06:42:57

0
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,不类定投

+1

确实如此,在Object类型的变量中引用Castted对象是没有意义的。但它对于调用方法很有用(这可能是OP想要做的):'cls.cast(o1).clsHasAMagicMethod()'。 – Koraktor 2012-03-02 06:42:56

+0

@Koraktor如果'cls'是一些已知的类,这将是有意义的,但OP的代码会得到的唯一东西是另一个'Object',因为'cls'没有任何声明的泛型类型参数。 – 2012-03-02 06:51:13

+0

@Koraktor id我们知道'clsHasAMagicMethod()'的名字,那么我们必须知道类,所以我们可以做更简单的'((classname)o1).clsHasAMagicMethod()' – 2012-03-02 06:53:22

0

如果你的迭代器返回,实际上是对象type Class this might work:

Object o1=itr.next(); 
Class clazz = (Class)o1; 

说实话,你的问题对我来说不是很清楚。