2015-12-21 32 views
3

即時通訊嘗試做一個方法,可以返回兩種不同的東西,基於饋入數據的類型。創建一個方法,可以返回兩個不同的東西

此類改變隨機項數據類型是

這就是我,我知道,在這個方法中,所有被允許返回是一種資源,但我不知道怎麼樣使其可以返回枯萎的資源或垃圾。

public Resource itemToResourceOrJunk(randomItem d){ 
    Resource i; 
    Junk O; 
    i = d.getResource(); 
    O = d.getJunk(); 

    if(d.resourceName.equals("notassigned")){ 
     return o; 
    } 
    else if(d.junkName.equals("notassigned")){ 
     return i; 
    } 
} 
+0

簡單地返回對象不是很優雅。垃圾和資源之間是否存在任何關係或通用性,是否允許使用可返回的接口或基類? – MikeJ

+0

我會推薦'Resource'和'Junk'來擴展/實現一個共同的屬性,然後只需'getData()' – Emz

+0

重新考慮這個方法的時候... – csmckelvey

回答

3

讓Resource和Junk實現一個接口並將其用作返回值。

所以

public class Resource implements ResourceOrJunk { 
... 
} 

public class Junk implements ResourceOrJunk { 
... 
} 

接口:

public interface ResourceOrJunk { 
//can be left empty, or add some shared methods 
} 

現在你可以將方法更改爲:

public ResourceOrJunk itemToResourceOrJunk(randomItem d){ 

和調用方法可以檢查結果:

ResourceOrJunk roj = itemToResourceOrJunk(d); 
if (roj instanceof Resource){ 
    Resource r = (Resource)d; 
    //do stuff with resource 
} else { 
    Junk j = (Jurk)d; 
    //do stuff with junk 
} 
+0

我做了這個,現在它說資源不能轉換爲randomItem相同的垃圾不能轉換爲randomItem – Dan2567

+0

你在哪裏投擲垃圾或資源randomItem?在我的例子中,我沒有把它放在任何地方,你也沒有。 – Wouter

+0

我把它放在一個袋類中,我希望能夠同時容納資源和垃圾 – Dan2567

2

你可以改變你的方法來返回對象:

public Object itemToResourceOrJunk(randomItem d){ 
    ... 
} 

然後調用者必須使用instanceof弄清楚實際返回什麼類型的對象。

4

你可以同時擁有ResourceJunk實現相同的接口(比如Stuff),然後進行返回類型itemToResourceOrJunk是該接口。如果您需要使用特定的方法或屬性

public class Resource implements Stuff { ... } 

public class Junk implements Stuff { ... } 

然後

public Stuff itemToResourceOrJunk(randomItem d){ ... } 

雖然:

需要明確的是,它可以走這條路到ResourceJunk,然後你必須轉換爲相關類型。

2

使資源和垃圾實現相同的接口(或擴展相同的類),然後使用它作爲返回類型。

相關問題