gpt4 book ai didi

java - 从集合中获取子类实例 - Java

转载 作者:行者123 更新时间:2023-12-01 14:58:25 26 4
gpt4 key购买 nike

这是一个 Java 编程情况,我希望看到任何可能的改进。

B类是A类的子类。B类的一些实例在Collection中。根据类型,我可以使用 instanceof 从集合中检索 B 类实例。然而,我不能将这些实例视为 B 类的实例,而只是 A 类的实例,因为不允许向下转型。因此,我必须通过使用 A 类中的覆盖 getter 来获取实例的一些小片段。这种解决方法存在一些问题。例如,某些 getter 在父类中没有任何意义,并且父类不能是抽象的。

还有更好的解决方案吗?

最佳答案

无需强制转换即可实现此目的的一种方法是使用 visitor pattern 。它在 Java 中有点冗长,但可扩展性很强......

interface Visitor {
void visit(A a)
void visit(B b)
}

class BOnlyVisitor implements Visitor {
public void visit(A a) {
throw new UnsupportedOperationException();
}

public void visit(B b) {
// Do stuff with b
}
}

interface Visitable {
void accept(Visitor v)
}

class A implements Visitable {
public void accept(Visitor v) {
v.visit(this);
}
}

class B implements Visitable {
@Override
public void accept(Visitor v) {
v.visit(this);
}
}

关于java - 从集合中获取子类实例 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033560/

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