(泛型)不能静态引用非静态类型T

运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印问候

定义方法将包括返回类型+方法名称以及参数

newInstance的返回类型是 SomeClass 在我看来很奇怪,因为我的班级叫做SomeClass 而不是

SomeClass

为什么在SomeClass 前面需要?看来,如果我不包含它,将会出现一个常见错误,称为“无法对非静态类型T进行静态引用”

要指出的另一件事是,我可以在和SomeClass 之间放置许多空格,因此似乎不需要将它们放在一起。

public class SomeClass<T> {

public static <T>SomeClass<T> newInstance(Class<T> clazz){

return new SomeClass<T>(clazz);

}

private SomeClass(Class<T> clazz){

System.out.println("hello");

}

}

public class Demo {

public static void main(String args[])

{

SomeClass<String> instance = SomeClass.newInstance(String.class);

}

}

回答:

什么是静态方法?一种适用于该类而不是特定实例的Method。T类签名中的泛型参数public class

SomeClass<T>仅可用于特定实例(因此non-static type T)。例如SomeClass<String>在哪里[T =

String]

通过<T>在方法中包括的签名public static <T>SomeClass<T> newInstance(Class<T>

clazz)。你是在说 对于此方法,有一个通用类型实参T。这与类签名中的T分开T。因此也可能是Cie public static <C>

SomeClass<C> newInstance(Class<C> clazz)。或完全不同的东西。

但是,如果您不包含<T>该方法,则编译器会认为您正在尝试T在类签名中使用。这是非法的。

以上是 (泛型)不能静态引用非静态类型T 的全部内容, 来源链接: utcz.com/qa/415350.html

回到顶部