如何使方法返回类型泛型?
2022-08-31 04:08:39
考虑这个例子(在OOP书籍中很常见):
我有一个班级,每个班级都可以有很多朋友。
和子类,如, 等,它们添加特定的行为,如,等等。Animal
Animal
Dog
Duck
Mouse
bark()
quack()
下面是类:Animal
public class Animal {
private Map<String,Animal> friends = new HashMap<>();
public void addFriend(String name, Animal animal){
friends.put(name,animal);
}
public Animal callFriend(String name){
return friends.get(name);
}
}
这里有一些代码片段,其中包含大量的类型转换:
Mouse jerry = new Mouse();
jerry.addFriend("spike", new Dog());
jerry.addFriend("quacker", new Duck());
((Dog) jerry.callFriend("spike")).bark();
((Duck) jerry.callFriend("quacker")).quack();
有没有办法使用泛型作为返回类型来摆脱类型转换,这样我就可以说
jerry.callFriend("spike").bark();
jerry.callFriend("quacker").quack();
下面是一些初始代码,其中返回类型作为从未使用的参数传递给方法。
public<T extends Animal> T callFriend(String name, T unusedTypeObj){
return (T)friends.get(name);
}
有没有办法在运行时找出返回类型,而无需使用额外的参数?或者至少通过传递该类型的类而不是虚拟实例。
我知道泛型是用于编译时类型检查的,但是有没有解决方法?instanceof