我需要一个Collection来存储几个对象。我想用Class或Superclass访问它们。
例如:collection.get(Object.class)
将返回所有对象。
我是否可以使用现成的课程,或者我需要自己编写课程。在这种情况下,我会使用HashMap<Class,Object>
作为基础。
答案 0 :(得分:4)
您可以使用Java 8 Streams以相对较短的语法检索所需的实例。例如:
List<SomeType> objects = collections.filter(o -> o instanceof SomeType).collect(Collectors.toList());
当然这样的代码需要遍历整个Collection。如果Collection很大并且性能是个问题,那么您应该将对象存储在一些允许更快检索的数据结构中(可能HashMap
)。
答案 1 :(得分:1)
如果您使用的是Java 8,请考虑以前的帖子解决方案,否则您可以使用apache
CollectionUtils.filter( youList, new Predicate(){
public boolean evaluate( Object input ) {
return input instanceof youClass;
}
} );
答案 2 :(得分:1)
不,没有内置便捷的方式。
但是,您可以轻松定义一种方法:
<T> List<T> getAllElements(Collection<?> collection, Class<T> targetClass) {
List<T> result = new ArrayList<T>();
for(Object obj : collection)
if(targetClass.isInstance(obj))
result.add(targetClass.cast(obj));
return result;
}
这与Eran的lambda解决方案基本相同,但不使用Java 8功能。