假设我有这种简单的类结构:
Vehicle
|-- Bus
`-- Car
Bus and Car extends Vehicle
我有List<Vehicle>
。我怎样才能获得公共汽车或汽车?我想避免使用instanceof
运营商。我是否必须使用访客模式或是否有更简单的解决方案?
答案 0 :(得分:3)
我认为没有办法避免在你的情况下使用instanceof
运算符,也没有办法生成比这更简单的代码(没有Guava的帮助):
List<Bus> buses = new ArrayList<Bus>();
for (Vehicle v : vehicles)
if (v instanceof Bus)
buses.add(v);
答案 1 :(得分:3)
某些内容需要使用instanceof
或等效内容(例如Class.isInstance
)。
Guava有一种方法可以做到这一点:Iterables.filter
。所以你可以使用:
List<Bus> buses = Lists.newArrayList(Iterables.filter(vehicles, Bus.class));
答案 2 :(得分:-2)
如果您不希望instanceOf将字段添加到确定类的Vehicle。