(泛型)不能静态引用非静态类型T
运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印问候
定义方法将包括返回类型+方法名称以及参数
newInstance的返回类型是
SomeClass
为什么在SomeClass
前面需要 ?看来,如果我不包含它,将会出现一个常见错误,称为“无法对非静态类型T进行静态引用”
要指出的另一件事是,我可以在
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
。因此也可能是C
ie public static <C>
SomeClass<C> newInstance(Class<C> clazz)。或完全不同的东西。
但是,如果您不包含<T>
该方法,则编译器会认为您正在尝试T
在类签名中使用。这是非法的。
以上是 (泛型)不能静态引用非静态类型T 的全部内容, 来源链接: utcz.com/qa/415350.html