选择某个子类的对象,然后循环它们?

时间:2015-02-07 22:11:56

标签: java collections

我正在用Java编写应用程序。我想知道是否有一种方法只能迭代Collection中某个子类的对象(在我的例子中是一个ArrayList)。我知道我可以使用 instanceof ,并且只能处理从该类创建的对象。而且我也知道我可以创建第二个ArrayList,在那里我放置特定类的对象,并迭代那个。但如果我可以“选择”迭代哪个子类,那将是非常方便的。

2 个答案:

答案 0 :(得分:1)

不,您通常会使用instanceof(或getClass())。话虽这么说,这些方法并不是非常OOP惯用的,很少是最好的方法。

我建议你要么

  1. 在超类中创建一个方法(使用空的默认实现),由要迭代的类重写,并为集合中的每个对象调用该方法,或者

  2. 虽然使用了visitor patternThis 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);