是否可以在 Java 中同时指定类型参数的上限和下限约束?

2022-09-02 21:43:11

是否可以在 Java 中同时指定类型参数的上限和下限约束?

我在Sun的论坛上找到了一个讨论这个问题的对话(显然是在泛型功能最终确定之前),但没有最终的答案。

总之,是否有有效的语法来执行以下操作?

public class MyClass<T extends Number super Integer>

答案 1

我不这么认为 - 据我所知,从语言规范中可以看出,“super”首先只对通配符类型有效。通配符的语法还表明,您也只能绑定一个通配符 - 因此您也不能使用类似下面的内容:

// Invalid
void foo(List<? extends Foo super Bar> list)

即使这两个都是可以的:

// Valid
void foo(List<? extends Foo> list)

// Valid
void foo(List<? super Bar> list)

如注释中所述,可以有多个上限 - 但仅适用于类型参数和强制转换表达式。例如:

// Valid
<T extends Number & Comparable> void foo(List<T> list)

答案 2

来自 Oracle 的教程

注: 您可以为通配符指定上限,也可以指定下限,但不能同时指定两者


推荐