返回一个实际的java类

时间:2016-04-15 23:46:00

标签: java

想象一下,我有一种关系,比如“狗生活在陆地上,鱼生活在水中,青蛙生活在水和土地上”。因此,这种关系是动物及其相关的生活环境。所以,我有自己的狗类,鱼类,以及其他任何动物。我也有自己的陆地类,水类和两个类,所有这些都扩展了抽象类Environment。

假设我想将每个环境类型与描述相关联,因此我创建了一个HashMap。

但是,当我执行代码时,我希望HashMap是HashMap<“Environment的一些子类”,String>。

现在,让我们说我们有一个对象,它是一种类型的狗,青蛙或任何类型的动物。我希望能够说:HashMap<Environment, String> = new HashMap<a.getAssociatedEnvironment(), String>;

如何编写此getAssociatedEnvironment()方法?我真的可以这样做:

public Class<T> getAssociatedEnvironment(Animal a) {
    if(a instanceof Dog) 
        return Dog.class
    if(a instanceof Frog) 
        return Frog.class
    . . . 
}

1 个答案:

答案 0 :(得分:1)

您无法动态创建类型参数 在运行时,您甚至没有任何关于泛型类型的实际类型信息 它是一种纯编译时类型检查,可以向后兼容。

您可能想要使用

HashMap<? extends Environment, String> h = new HashMap<>;

HashMap<? super Environment, String> h = new HashMap<>;

取决于您是否要将内容添加到地图中。如果您需要更深入地了解泛型,请阅读更多有关泛型的信息。 : - )

除此之外,您可能希望LandWater代替LandAnimalWaterAnimal接口,然后Dog实施LandAnimalFish实施WaterAnimalFrog同时实施。