gpt4 book ai didi

java - 绕过运行时缺少 Java 泛型,将父类(super class)型绑定(bind)到子类实例

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:49 24 4
gpt4 key购买 nike

想象一个方法,例如

public <F extends Fruit> Juice<F> makeJuiceFrom(Collection<F> fruits) {
for (F fruit: fruits) {
handleFruit(fruit);
}
return ...
}

现在我想重载 handleFruit 方法,以便它处理不同类型的水果,例如

 void handleFruit(Apple),  void handleFruit(Orange) 

橘子和苹果延伸水果的地方。

但是,现在我当然被迫使用硬代码绑定(bind)的方法:

private void HandleFruit(Fruit fruit) {
if (Fruit instanceof Apple)
handleFruit(((Apple)fruit));
else if (...)

...

有什么方法可以动态绑定(bind)它:

private void handleFruit(Fruit fruit) {
handleFruit(((fruit.getType)fruit));
}

最佳答案

是的,您正在寻找 visitor pattern .

Fruit的每个子类中写一个方法:

public void visit(Juice j) {
j.handleFruit(this);
}

现在,你可以有不同类型的handleFruit()this的静态类型是特定的(Apple/ Orange/...)根据visit()方法的实现类,调用正确的方法。

从您的 Juice 类调用 fruit.visit(this)

关于java - 绕过运行时缺少 Java 泛型,将父类(super class)型绑定(bind)到子类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28718130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com