繁体   English   中英

<t extends comparable<t> &gt;</t>

[英]<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以便您的代码可以编译。

如果TEmployee ,则代码将编译。 Employee实现Comparable<Employee> 您还可以将Manager传递给Employee类型的参数,因为Manager继承自Employee ,所以一切都很好。

然而,在test1中,没有T将使您的代码编译。 假设TManager ,但Manager没有实现Comparable<Manager> 假设TEmployee ,但List<Manager>不能传递给List<Employee>类型的参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM