2014-12-22 285 views
2

用戶定義POJO考慮一個例子強制轉換對象類型在Java

public Object myMethod() 
{ 
    //some condition 
    return obj of type Object1; 
    //else 
    return obj of type Object2; 

} 

我稱之爲如下,

Object obj = myMethod(); 

obj = (obj instanceof Object1)? (Object1)obj : (Object2) obj; 

我的問題是,即使類型轉換OBJ後既不Object1類型的NOR型的對象2。解決這個問題的最好方法是什麼?

+0

請提供進一步的代碼,即在obj中獲取type1或type2的對象後您想要做什麼。而且你的最後一行代碼是沒用的(它不會做任何改變)。 –

+0

如果您爲這些對象提供相同的父接口,則可以更輕鬆地使用這兩種類型而不重複您的代碼。 –

回答

3

沒有分配給您正在投射的類型的變量就沒有意義,因此您需要兩個變量。

Object obj = myMethod(); 
Object1 obj1 = null; 
Object2 obj2 = null; 
if (obj instanceof Object1) { 
    obj1 = (Object1) obj; 
    // some specific Object1 handling 
} else if (obj instanceof Object2) { 
    obj2 = (Object2) obj; 
    // some specific Object2 handling 
} 
+0

事情是我必須從那裏使用相同的變量obj,否則我可能必須爲obj1和obj2編寫單獨的代碼。 –

+0

@SurajHK如果您的代碼需要使用Object1或Object2的特定方法,則必須具有對它們的引用,並且對於myMethod返回的每種類型,您的代碼都會有所不同。如果代碼的其餘部分應該看起來相同,不管myMethod返回的類型是多少(例如,它只會調用Object1和Object2中都存在的方法),那麼應該定義一個包含所有Object1和Object2共享方法的接口,並將obj投射到此界面。 – Eran

1

您正在投射的對象已經是正確的類型。打電話給myMethod後,您的演員是無用的。

您需要將轉換對象分配給相同類型的引用才能使用它。

Object obj = myMethod(); 
if(obj instanceof Object1){ 
    doSomething((Object1) obj); 
} else { 
    doSomething((Object2) obj); 
} 

然後,您可以在超載的doSometing方法中使用正確的接口。