代码之家  ›  专栏  ›  技术社区  ›  Hosam Aly

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

  •  16
  • Hosam Aly  · 技术社区  · 16 年前

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

    我发现 a conversation in Sun's forum 其中讨论了这个问题(显然是在泛型特性最终确定之前),但没有最后的答案。

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

    public class MyClass<T extends Number super Integer>
    

    是吗?

    2 回复  |  直到 8 年前
        1
  •  12
  •   Jon Skeet    8 年前

    我不这么认为——就语言规范而言,“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
  •  5
  •   ROMANIA_engineer Alexey    10 年前

    Oracle's tutorial :

    注意:可以为通配符指定上界,也可以指定下界,但是 不能同时指定 .