Java /返回动态对象类型

时间:2014-03-27 10:50:26

标签: java polymorphism

两种方法当前返回相同的对象,仅在对象名称上有所不同。

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

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

理想情况下,我可以构建一个方法,根据它的调用方式动态返回一个类型。这有意义吗?

当我查找<T> T的示例时,我不清楚如何返回指定的类型。在其他地方,一个名为“类型擦除”的gremlin似乎被绑架了。我吠叫错了树吗?我应该寻找什么?

3 个答案:

答案 0 :(得分:1)

AnimalPerson创建一个父类,可能称为Entity,并将其作为返回类型。摘要将所有常见字段和方法都放入父级。唯一需要注意的是,当方法返回时,您可能需要转换为特定类型。

答案 1 :(得分: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将返回一个Animal和personStore a Person。

答案 2 :(得分:0)

尝试使用Object类,它是所有对象的父类。即使你已经创建了。

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html