为什么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如有任何建议,将不胜感激。谢谢,
发布于 2020-12-20 07:12:12
请记住,T可以是任何引用类型。您假设编译器选择T为Manager,但如果它这样做了,您的代码就会如您所说的那样无法编译。编译器的工作是编译您的代码,因此它将尝试找到一个T,以便您的代码能够编译。
如果T是Employee,代码将编译。Employee实现了Comparable<Employee>。还可以将Manager传递给Employee类型的参数,因为Manager是从Employee继承的,所以一切都很好。
然而,在test1中,没有T会使您的代码编译。假设T是Manager,但Manager没有实现Comparable<Manager>。假设T是Employee,但是List。
https://stackoverflow.com/questions/65377653
复制相似问题