我有一个对象列表,其中包含各种子类型:
List<Dog> dogList = new ArrayList<>();
dogList.add(new Poodle())
dogList.add(new Dalmation());
我想搜索这个列表并返回所有指定类的实例:
public <T extends Dog> List<T> getAll(Class<T> dogType){
List<T> returnObjects = new ArrayList<>();
for(T obj : dogList){
if(dogType.instanceOf(obj){
returnObjects.add(dogType.cast(obj));
}
}
return returnObjects;
}
使用方法:
List<Poodle> poodleList = getAll(Poodle.class);
这是我第一次涉足泛型,感觉事情有点失控。这种做法可行吗?或者我错过了更简单/明显的解决方案吗?
编辑:更新使用instanceOf()和cast()来避免未经检查的转换。
instanceof
。 - jhamonfor(T obj : dogList)
无法编译:dogList
不能是List<T>
,因为它在getAll
之外声明。你应该在_foreach_中将T
替换为Dog
。 - Didier LdogType.instanceOf(obj)
应该改为dogType.isInstance(obj)
。 - Thomas