[英]Generic method in java not returning the type expected
我创建了一个通用方法toList():
public static <T> List<T> toList(T... args){
List<T> list = new ArrayList<T>();
for (T t : args) {
list.add(t);
}
if(list instanceof Comparable<?>){
System.out.println("The list was considered a list of Comparable objects");
}
if(list instanceof Serializable){
System.out.println("The list was considered a list of Serializable objects");
}
if(list instanceof Object){
System.out.println("The list was considered a list of Object class' objects");
}
return list;
}
我正在像这样调用此方法:
public static void main(String[] args) {
System.out.println(Generics.<Comparable>toList(1,2,"3"));
}
我期待着因为我已经提供了Comparable类型,所以第一个if条件将为true,而o / p将首先为Comparable,然后是Object。 但是令我惊讶的是,如果并且o / p是Serializable然后是Object,则控件没有首先进入。
任何人都可以阐明其背后的原因吗? 我也不清楚在访问修饰符之后在方法签名中应用T的概念。
我们已经提到了访问说明符,修饰符和返回类型。 供应T有什么需要?
您正在对列表对象而不是对列表元素执行断言。
list instanceof Comparable<?>
仅当列表本身将实现Comparable
接口时,才返回true
。 由于ArrayList
是可序列化的,并且当然是对象,因此其他两个条件的评估结果为true
。
在我看来,您要尝试的是测试方法内部的元素类型T
由于类型擦除(遵循链接),您无法执行此操作。 T
的实际类型仅在编译时才知道,而在运行时则不知道。 在运行时,在方法内部,Java只会认为T
是Object
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.