我正在用Java编写应用程序。我想知道是否有一种方法只能迭代Collection中某个子类的对象(在我的例子中是一个ArrayList)。我知道我可以使用 instanceof ,并且只能处理从该类创建的对象。而且我也知道我可以创建第二个ArrayList,在那里我放置特定类的对象,并迭代那个。但如果我可以“选择”迭代哪个子类,那将是非常方便的。
答案 0 :(得分:1)
不,您通常会使用instanceof
(或getClass()
)。话虽这么说,这些方法并不是非常OOP惯用的,很少是最好的方法。
我建议你要么
在超类中创建一个方法(使用空的默认实现),由要迭代的类重写,并为集合中的每个对象调用该方法,或者
虽然使用了visitor pattern。 This answer非常接近你所追求的目标。
答案 1 :(得分:0)
您可以使用Java 8的流来过滤正确的类:
myList.stream().filter(o -> o instanceof SpecificClass).forEach(System.out::println);
这将只打印出SpecificClass的对象。如果您有要在变量中选择的类,则可以执行以下操作:
Class<? extends Object> classToSelect = SpecificClass.class;
myList.stream().filter(classToSelect::isInstance).forEach(System.out::println);