从技术上讲,您可以使用它instanceof
来检查对象是否为某种类型。
然而......这不是一个好主意。
您声明方法的方式,它可以接受任何类型的 List,因此它不一定是 A 或 B。
很难说出你想要做什么,但你可能应该让你的方法通用。
你可以这样做:
public static <T> String method(List<T> arg) {
// We now know that the type of the list is T, which is
// determined based on the type of list passed to this
// method. This would demonstrate the point better if
// the return type was T, but I'm leaving the return type
// as String, because that's what your code returns.
}
这是一个更好的例子:
如果你想创建一个返回列表第一个元素的通用方法,你可以这样做:
public static <T> T firstElement(List<T> theList) {
if (theList == null) {
return null;
}
T objectOfTypeT = theList.get(0);
return objectOfTypeT;
}
请注意,返回类型是 now T
。
因为我们将此方法设为通用,所以它可以返回 List 中使用的相同类型。
您通常只会 return theList.get(0)
,但我添加了一行以使泛型的目的更加明显。
语法解释:
这允许编译器说:“这个方法需要 T 类型的东西。哦,看......这个列表也是 T 类型的。如果有人将一个字符串列表传递给这个方法,那么 T 必须是一个字符串。如果有人通过此方法的整数列表,T 必须是整数。 "
相反,您的方法只能返回一个字符串,并且它不知道列表中使用的是什么类型。
还...
如果 A 和 B 都扩展同一个类,名为 TheParentClass,你可以像这样声明你的方法:
public static String method(List<? extends TheParentClass> arg)
这样,您将对参数的可能类型了解更多(并且可以从编译时类型检查中受益)。