像这样使用Java中的泛型编程:类A< B>,为什么我不能新建一个B的对象

Using generic programming in Java like this: class A<B>, why I cannot new a B's object

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
public class A {
    public func() {
        B b = new B();
    }
}

我从netbeans得到这个错误提示:

1
2
3
4
5
unexpected type
  required: class
  found:    type parameter B
  where Bis a type-variable:
    B extends Object declared in class A

我如何才能新建B类对象?


A中的B只是一个类型参数。不能创建实例化参数。只能创建实际类型的实例。

但您可以声明将该实例作为参数public func(B b)的方法。

我建议您阅读关于泛型的教程。


由于类型擦除,您不能这样做。请看下面的答案https://stackoverflow.com/a/6810709/860294


原因是B可以是接口或类(甚至是抽象的)。因此,对于接口或抽象类,new b()将无效。因此,这是不允许的。


Java使用类型擦除。它不知道B的类,因此它不知道在运行时,B类最终会不会有一个带有该参数集的构造函数。