2012-03-02 97 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; 

說實話,你的問題對我來說不是很清楚。