[英]<T extends Comparable<T>>
为什么 test1 会导致错误,而 test2 不会? 根据 test2, <T extends Comparable<T>>
。 但是Manager实现了Comparable<Employee>
,而不是Comparable<Manager>
,那么为什么 test2 不会导致错误呢?
public class Employee implements Comparable<Employee>{...}
public class Manager extends Employee{...}
public static <T extends Comparable<T>> void test1(List<T> t){ }
public static <T extends Comparable<T>> void test2(T t){ }
--------------------
List<Manager> listManager = new ArrayList<>();
test1(listManager); //ERROR
test2(new Manager());
错误信息:
Required type:List<T>
Provided:List<Manager>
reason: Incompatible equality constraint: Employee and Manager
任何建议将不胜感激。 谢谢你。
请记住, T
可以是任何引用类型。 您假设编译器选择T
作为Manager
,但如果这样做,您的代码将如您所说的无法编译。 编译器的工作是编译您的代码,因此它会尝试找到一个T
以便您的代码可以编译。
如果T
是Employee
,则代码将编译。 Employee
实现Comparable<Employee>
。 您还可以将Manager
传递给Employee
类型的参数,因为Manager
继承自Employee
,所以一切都很好。
然而,在test1
中,没有T
将使您的代码编译。 假设T
是Manager
,但Manager
没有实现Comparable<Manager>
。 假设T
是Employee
,但List<Manager>
不能传递给List<Employee>
类型的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.