两种方法当前返回相同的对象,仅对象名称不同。
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/