为了避免在运行时缺少Java泛型,将超类型绑定到子类实例
想象一种方法,例如
public <F extends Fruit> Juice<F> makeJuiceFrom(Collection<F> fruits) {
for (F fruit: fruits) {
handleFruit(fruit);
}
return ...
}
现在我想重载handleFruit方法,以便它处理不同类型的水果,例如
void handleFruit(Apple), void handleFruit(Orange)
橘子和苹果延伸出果实
然而,现在我当然被迫为硬代码绑定修改一个方法:
private void HandleFruit(Fruit fruit) {
if (Fruit instanceof Apple)
handleFruit(((Apple)fruit));
else if (...)
。。。 }
是否有任何方法可以动态绑定它:
private void handleFruit(Fruit fruit) {
handleFruit(((fruit.getType)fruit));
}
# 1 楼答案
我建议您将该方法添加到
Fruit
并这样调用它# 2 楼答案
是的,您正在寻找visitor pattern
在
Fruit
的每个子类中编写一个方法:现在,您可以有不同类型的
handleFruit()
,并且this
的静态类型是特定的(Apple
/Orange
/)根据visit()
方法的实现类,将调用正确的方法从
Juice
类中使用fruit.visit(this)
调用