(generics)不能对非静态类型T进行静态引用

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

定义方法将包含带参数的返回类型+方法名称

newInstance的返回类型是 SomeClass 对我来说似乎很奇怪,因为我的类被称为SomeClass 而不是 SomeClass

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

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

public class SomeClass { public static SomeClass newInstance(Class clazz){ return new SomeClass(clazz); } private SomeClass(Class clazz){ System.out.println("hello"); } } public class Demo { public static void main(String args[]) { SomeClass instance = SomeClass.newInstance(String.class); } } 

什么是静态方法? 适用于类的方法,而不是特定的实例。 类签名public class SomeClass的generics参数T仅可用于特定实例(因此non-static type T )。 例如SomeClass ,其中[T = String]

通过在public static SomeClass newInstance(Class clazz)的方法签名中包含 。 你这么说; 对于此方法,存在generics类型参数TT与类签名中的T分开。 所以它也可能是Cpublic static SomeClass newInstance(Class clazz) 。 或者完全不同的东西。

但是如果你没有在方法中包含 ,编译器会认为你正在尝试在类签名中使用T 哪个是非法的。