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

标签 java instanceof

我的类 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/

相关文章:

java - 机器人 keyPress 在 linux 中不工作

java - 在maven元素中我如何指定文件的相对路径

java - 使用 CascadeType 进行复制

带有类名的 Java instanceof

Java实例化运算符

java - 使用 Jackson 映射 Json 到 pojo 类

java - 为什么 getEntry(Object key) 没有暴露在 HashMap 上?

JAVA - 使用列表重构多个 "instanceof"

java - 使用与类关联的条目创建枚举

java - instanceof 用于多种类型