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

时间:2013-03-24 02:46:00

标签: java generics

public class A<B> {
    public func() {
        B b = new B();
    }
}

我从Netbeans收到此错误提示:

unexpected type
  required: class
  found:    type parameter B
  where Bis a type-variable:
    B extends Object declared in class A

如何创建B类对象?

4 个答案:

答案 0 :(得分:2)

由于type erasure,你无法做到这一点。看一下以下答案https://stackoverflow.com/a/6810709/860294

答案 1 :(得分:2)

B中的

A<B>只是一个类型参数。您无法创建实例化参数。您只能创建实际类型的实例。

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

我建议您阅读generics上的教程。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

原因是B可以是接口或类(甚至是抽象的)。因此,在接口或抽象类的情况下,新的B()将无效。因此,不允许这样做。