两种方法当前返回相同的对象,仅在对象名称上有所不同。
Animal getEntity(e) {
...
return Animal
}
Person getEntity(e) {
...
return Person
}
理想情况下,我可以构建一个方法,根据它的调用方式动态返回一个类型。这有意义吗?
当我查找<T> T
的示例时,我不清楚如何返回指定的类型。在其他地方,一个名为“类型擦除”的gremlin似乎被绑架了。我吠叫错了树吗?我应该寻找什么?
答案 0 :(得分:1)
为Animal
和Person
创建一个父类,可能称为Entity
,并将其作为返回类型。摘要将所有常见字段和方法都放入父级。唯一需要注意的是,当方法返回时,您可能需要转换为特定类型。
答案 1 :(得分:1)
您不能拥有两个具有相同signature和return 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