我有一个Java方法,需要检查ArrayList中是否包含给定类的实例。我需要将要检查的类的类型作为参数传递给该方法,如果列表包含给定类型的对象,则返回它。这可行吗?
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);
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;
}
clazz.isAssignableFrom( o.getClass() )
可以写成 clazz.isInstance( o )
。 - user102008Class<?> zz = String.class;
for (Object obj : list) {
if (zz.isInstance(obj)) {
System.out.println("Yes it is a string");
}
}
isInstance
也会捕获子类。否则,请参见Bela的答案。检查列表中的一个项目实例
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;
}
}
Class.isAssignableFrom
方法,方法应该接受Collection
而非ArrayList
(即使用接口编程)。此外,建议遵循 Java 推荐的代码规范,将方法名以小写字母开头。 - Steve KuoClass.isInstance
。 - user102008