为什么允许“扩展 T”,但不允许“实现 T”?

2022-08-31 04:54:04

在 Java 中,使用 always “” 而不是 “” 来定义类型参数的边界是否有特殊原因?extendsimplements

例如:

public interface C {}
public class A<B implements C>{} 

是被禁止的,但是

public class A<B extends C>{} 

是正确的。这是什么原因呢?


答案 1

在泛型约束语言中,类是“实现”还是“扩展”之间没有语义差异。约束可能性是“扩展”和“超级” - 也就是说,这个类是要操作的可分配给另一个类(扩展),还是这个类可以从那个类(超级)分配。


答案 2

答案就在这里

若要声明有界类型参数,请列出类型参数的名称,后跟关键字,后跟其上限 [...]。请注意,在此上下文中,extends 在一般意义上用于表示(如在类中)或(如在接口中)。extendsextendsimplements

所以你有它,它有点令人困惑,甲骨文知道这一点。