首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><T扩展Comparable<T>>

<T扩展Comparable<T>>
EN

Stack Overflow用户
提问于 2020-12-20 07:05:16
回答 1查看 131关注 0票数 0

为什么test1会导致错误,而test2却不会?根据test2,<T extends Comparable<T>>。但是Manager实现的是Comparable<Employee>,而不是Comparable<Manager>,那么为什么test2不会导致错误呢?

代码语言:javascript
复制
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());      

在这里输入图像描述

错误消息:

代码语言:javascript
复制
Required type:List<T>
Provided:List<Manager>
reason: Incompatible equality constraint: Employee and Manager

如有任何建议,将不胜感激。谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 07:12:12

请记住,T可以是任何引用类型。您假设编译器选择TManager,但如果它这样做了,您的代码就会如您所说的那样无法编译。编译器的工作是编译您的代码,因此它将尝试找到一个T,以便您的代码能够编译。

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

然而,在test1中,没有T会使您的代码编译。假设TManager,但Manager没有实现Comparable<Manager>。假设TEmployee,但是List

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65377653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档