java - java中Instanceof的正确用法

标签 java oop instanceof

实例 of 在 java 中被认为是一种不好的做法。但我不知道在这种情况下如何避免。 假设我有一个抽象类 ArtObject 并且有一些子类,例如 PaintingEngraving 等。我有一个类 Museum,其中包含 ArtObjectArrayList

例如,我想打印有关 Museum 中所有 Painting 对象的信息。

我应该做这样的事情吗?:

public void printAllPaintingsInfo() {
    for (int i = 0; i < artObjects.size(); i++) {
        if (artObjects.get(i) instanceof Painting) {
            System.out.println(artObjects.get(i));
        }
    }
}

或者存在更好的方法?

最佳答案

您可以向 ArtObject 添加一个方法 isPainting(),默认情况下 return false; 并重写为 return true; 在绘画中。

然后你就可以写了

public void printAllPaintingsInfo() {
    for (ArtObject ao : artObjects)
        if (ao.isPainting())
            System.out.println(ao);
}

或者在 Java 8 中你可以这样写

artObjects.filter(ArtObject::isPainting).forEach(System.out::println);

关于java - java中Instanceof的正确用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127934/

相关文章:

oop - Fortran 构造函数返回指向已分配对象的指针

java - 在父类上使用instanceof来抽象类和非抽象子类

java - 再次运行程序

java - 如何在我的 Docker 自托管 Jitsi 服务器中为我的 Android 应用程序实现 jwt token 韵律插件?

java - 在不使用 Thread.sleep 的情况下向 for 循环添加延迟——没关系,这是一个坏主意

java - java 中用于提及接口(interface)特殊属性的不同术语?

javascript - 为什么我会选择闭包而不是对象有实际原因吗?

java - 如何检查对象是否实现了特定的接口(interface),而不是这个接口(interface)的后代,在 Java 中

java - 如何将 instanceof 与 scala 对象一起使用?

java - 按下删除按钮时不删除 SQLite 表行,android