class Gen <T super Number> // 1 // IS NOT ALLOWED
void Demo( Gen <? super Number> ob) // 2 // IS ALLOWED // Gen is a generic class
为什么第一个语句导致编译时错误,第二个语句正常工作
答案 0 :(得分:2)
第一个例子是泛型类型。第二个例子是参数化类型。他们是不同的东西。
泛型类型参数的下限不能用于任何用途†。因此,它不是Java中的“一件事”。
然而,第二个示例意味着:“类型function
的任何参数化,其中类型参数是数字的超类型”。它很有用,因为它允许泛型类型的多态性。
†通过提供"restricted instantiation"实际上它们的用途实际上有限,但被认为不足以被允许。