【发布时间】:2010-10-01 20:05:24
【问题描述】:
考虑这个例子(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);
}
}
这里有一些带有大量类型转换的代码 sn-p:
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 来计算返回类型而不需要额外的参数?或者至少通过传递该类型的类而不是虚拟实例。
我知道泛型用于编译时类型检查,但有解决方法吗?
【问题讨论】:
标签: java generics return-value