有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型类和通配符的java上界

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

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    然而,第二个示例的意思是:“类型Gen<T>的任何参数化,其中类型参数是数字的超类型”。它很有用,因为它允许泛型类型的多形性

    通过提供"restricted instantiation",它们实际上可能用途有限,但被认为不够有用,不允许使用