Java/返回动态对象类型

标签 java polymorphism

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

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

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

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

当我寻找 <T> T 的示例时,不清楚如何返回指定类型。在其他地方,一个名为“类型删除”的小魔怪似乎被广泛传播。我是不是找错了树?我应该寻找什么?

最佳答案

两种方法不能具有相同的 signature ,以及 return is not part of the signature

您可以使用接口(interface)作为 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 将返回一个 Person。

关于Java/返回动态对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22685351/

相关文章:

c++ - 用于初始化派生类型的通用 switch 语句

C++ 函数 = 删除

C++ 多态性,不完全向下转型

java - 访问类 A 内部的方法而不实例化或扩展类 A?

java - 线程池不调整大小

java - 如何重置createChooser Intent 中的数据

java - 哪个单元测试框架用于 JavaFX 应用程序?

c++ - 创建基类对象的 vector 并将派生类对象存储在其中

java - Java中的泛型类型——高级多态性

java - 如何正确修补 JAR 文件中的 Java 类?