2014-03-27 173 views
1

兩種方法當前返回相同的對象,僅在對象名稱上有所不同。Java /返回動態對象類型

Animal getEntity(e) { 
    ... 
    return Animal 
} 

Person getEntity(e) { 
    ... 
    return Person 
} 

理想情況下,我可以構造一個方法,根據它的調用方式動態返回一個類型。這有意義嗎?

當我在尋找<T> T的例子時,我不清楚如何返回指定的類型。在其他地方,一個名爲「類型擦除」的gremlin似乎有點流行。我吠叫錯了樹嗎?我應該尋找什麼?

+0

這是有道理的,你可以做到這一點,作爲向哪裏看,搜索在谷歌動態類型..我會尋找你,秒 – Infested

+0

這裏例如http://stackoverflow.com/questions/450807 /怎麼辦-I-MAKE-的法回型通用 – Infested

回答

1

您不能有兩個方法使用相同的signaturereturn is not part of the signature

您可以使用界面作爲Animal和Person的父項來完成您想要的操作。這將返回一個適當的人或動物,取決於你作爲參數傳遞的內容。該方法的返回類型將是Interface。

public interface Living {} 

和:

public class Animal implements Living {} 

對於人:

public class Person implements Living {} 

所以你的方法是:

public Living getEntity(Something e) { 
    // you can return Animal or Person 
} 

你需要轉換getEntity

返回
Animal myAnimal = (Animal)myClass.getEntity(...); 

另一種選擇將使用泛型(你將避免鑄件),並有類返回不同類型的不同實例。一個例子(你可以按照不同的策略):

class Dynamic <T extends Object> { 
    T t; 

    T getEntity(Object e) { 
     return t; 
    } 

    void setEntity(T e) { 
     this.t = e; 
    } 
} 

,並使用它:

Dynamic<Animal> animalStore = new Dynamic<>(); 
Dynamic<Person> personStore = new Dynamic<>(); 

所以animalStore將返回一個動物,一個personStore人。

1

AnimalPerson創建一個父類,也可以叫做Entity,使返回類型。將所有常用字段和方法抽象爲父項。唯一需要注意的是,當方法返回時,您可能需要轉換爲特定類型。