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

时间:2010-03-27 19:05:23

标签: java generics

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

我发现a conversation in Sun's forum已经讨论了这个问题(显然在仿制药功能最终确定之前),但没有最终答案。

总之,是否有一个有效的语法来执行此操作:

public class MyClass<T extends Number super Integer>

3 个答案:

答案 0 :(得分:12)

我不相信 - 据我所知,语言规范中,“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)

答案 1 :(得分:5)

来自Oracle's tutorial

  

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

答案 2 :(得分:0)

您不能同时指定两者,但可以像给定的代码那样实现。

fooStr