(泛型)不能对非静态类型t进行静态引用

omqzjyyz  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(411)

运行demo类将调用someclass中的静态方法newinstance来调用构造函数并打印hello
定义一个方法将包括一个带有参数的返回类型+方法名
newinstance的返回类型是someclass对我来说似乎很奇怪,因为我的类被称为someclass而不是someclass
为什么我要把放在someclass前面?似乎如果我不包括它,就会出现一个常见的错误,名为cannotmakeastaticreference to the non-static type 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);
    }
}
jtw3ybtb

jtw3ybtb1#

什么是静态方法?在类上工作而不是在特定示例上工作的方法。泛型参数 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 在班级签名。所以也可能是这样 Cpublic static <C> SomeClass<C> newInstance(Class<C> clazz) . 或者完全不同的东西。
但如果你不包括 <T> 对于该方法,编译器认为您正在尝试使用 T 在班级签名。这是违法的。

相关问题