泛型类和通配符的上限

时间:2015-07-03 11:18:17

标签: java generics wildcard super

class Gen <T super Number>           // 1 // IS NOT ALLOWED

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

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

1 个答案:

答案 0 :(得分:2)

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

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

泛型类型参数的下限不能用于任何用途。因此,它不是Java中的“一件事”。

然而,第二个示例意味着:“类型function的任何参数化,其中类型参数是数字的超类型”。它很有用,因为它允许泛型类型的多态性。

通过提供"restricted instantiation"实际上它们的用途实际上有限,但被认为不足以被允许。