gpt4 book ai didi

java - 如何在不使用 instanceof 的情况下查找类型?

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:41 25 4
gpt4 key购买 nike

我的类 Query 中有一个接口(interface)类型为 CriteriaList

List<Criteria> criteria = new ArrayList<Criteria>();

我有几个Criteria的具体实现。我想为 Query 提供一个遍历我的 criteria 列表的方法,并根据具体类型执行一些逻辑。

我目前正在使用 instanceof 这样做:

for(Criteria c : criteria) {
if(c instanceof ContextualCriteria){
// logic
}
...
}

这是唯一/最好的方法吗?

最佳答案

逻辑是否合理地属于 Criteria 本身?如果是这样,将它放入 Criteria 接口(interface),并为每个实现 Criteria 接口(interface)的具体类适本地实现它。这显然是不错的多态方法。

不幸的是,在现实生活中 OO 并不总是那么简单 - 有时将每个类型的行为放在类型本身中没有意义,因此您可能需要使用 instanceof 代替。您可能可能有一个从“条件类”到表示要采取的操作的某个接口(interface)的映射,但这很容易最终变得更加困惑。

通过 visitor pattern 进行双重调度有时可以稍微改进一下 - 所以逻辑仍然可以在您的“调用”类中的单独方法中,但是每个 Criteria 都可以调用 back通过单个接口(interface)方法到正确的方法。就我个人而言,我倾向于发现这会增加耦合并很快变得丑陋,但其他人发誓。

关于java - 如何在不使用 instanceof 的情况下查找类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7453288/

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