我有一个List<Base>
包含多个实现的所有对象,例如 Foo
或Bar
。
我如何提取完整列表的子集来获取例如所有 Foo
是吗?
以下内容可以工作,但非常丑陋(重复代码、类型转换等)。
class Base;
class Foo extends Base;
class Bar extends Base;
List<Base> bases;
List<Foo> getFoos() {
List<Foo> foos = new ArrayLista<Foo>();
for (Base base : bases) {
foos.add((Foo) base);
}
return foos;
}
List<Bar> getBars() {
List<Bar> Bars = new ArrayLista<Bar>();
for (Base base : bases) {
Bars.add((Bar) base);
}
return Bars;
}
如何改进?
最佳答案
试试这个,
private <T extends Base> List<T> getSubType(Class<T> type)
{
List<T> list = new ArrayList<T>();
for (Base b : bases)
{
if (b.getClass().isAssignableFrom(type))
{
list.add((T) b);
}
}
return list;
}
关于java - 如何从 super 列表中获取某些类对象列表的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750371/