我有一个java方法应该检查ArrayList并检查它是否包含给定类的实例。我需要传递方法类型的类来检查作为参数,如果List包含给定类型的对象,则返回它。
这可以实现吗?
答案 0 :(得分:18)
public static <T> T find(Collection<?> arrayList, Class<T> clazz)
{
for(Object o : arrayList)
{
if (o != null && o.getClass() == clazz)
{
return clazz.cast(o);
}
}
return null;
}
并致电
String match = find(myArrayList, String.class);
答案 1 :(得分:4)
public static <T> T getFirstElementOfTypeIn( List<?> list, Class<T> clazz )
{
for ( Object o : list )
{
if ( clazz.isAssignableFrom( o.getClass() ) )
{
return clazz.cast( o );
}
}
return null;
}
答案 2 :(得分:1)
如果你使用的是Java 8,你可以这样做:
public <T> Optional<T> getInstanceOf(Class<T> clazz, Collection<?> collection) {
return (Optional<T>) collection.stream()
.filter(e -> clazz.isInstance(e.getClass()))
.findFirst();
}
如果您之前从未使用过,请查看Optional
的文档。实际上这比returning null更好。
答案 3 :(得分:0)
您可以对列表进行迭代并测试每个元素
Class<?> zz = String.class;
for (Object obj : list) {
if (zz.isInstance(obj)) {
System.out.println("Yes it is a string");
}
}
请注意isInstance
也会捕获子类。否则请看Bela的回答。
答案 4 :(得分:0)
检查列表中的项目实例之一
if (object instanceof ArrayList<?>) {
if (((ArrayList<?>) object).get(0) instanceof ClassA) {
classAList= (ArrayList<ClassA>) object;
} else if (((ArrayList<?>) object).get(0) instanceof ClassB) {
classBList= (ArrayList<classB>) object;
} else if (((ArrayList<?>) object).get(0) instanceof ClassC) {
classCList= (ArrayList<ClassC>) object;
}
}