【问题标题】:Upper Bound of generic class and wildcard泛型类和通配符的上限
【发布时间】:2015-07-03 11:18:16
【问题描述】:
class Gen <T super Number>           // 1 // IS NOT ALLOWED

void Demo( Gen <? super Number> ob)  // 2 // IS ALLOWED // Gen is a generic class

为什么第一个语句会导致编译时错误,而第二个语句工作正常

【问题讨论】:

    标签: java generics wildcard super


    【解决方案1】:

    第一个示例是泛型类型。第二个例子是参数化类型。它们是不同的东西。

    • 泛型类型是对类型进行参数化的类型的定义。可以通过为这些类型参数提供类型参数来调用它。
    • 参数化类型是对具有类型参数的泛型类型的调用,无论这些类型参数是类型还是通配符。

    泛型类型的类型参数的下限不能有任何用处。因此它不是 Java 中的“事物”。

    但是,第二个示例的意思是:“Gen&lt;T&gt; 类型的任何参数化,其中类型参数是 Number 的超类型”。它很有用,因为它允许泛型类型的多态性。

    通过提供"restricted instantiation",它们实际上可能会受到限制,但被认为没有足够的用处。

    【讨论】:

    • It is useful as it allows polymorpyhism of generic types,参数化类型还有其他用途吗?
    • @kevingomes。通配符参数化类型都是关于多态性的。 Gen&lt;Object&gt;Gen&lt;Number&gt; 的赋值不兼容,但 Gen&lt;?&gt; 是。使用上限/下限限制这些通配符允许您限制多态集,这很有用,因为它创建了具有输入/输出参数的能力。
    猜你喜欢
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多