加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – (Generics)不能对非静态类型T进行静态引用

发布时间:2020-12-15 04:33:18 所属栏目:Java 来源:网络整理
导读:运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印hello 定义方法将包含带参数的返回类型方法名称 newInstance的返回类型是 T SomeClass T对我来说似乎很奇怪 因为我的班级被称为SomeClass T而不是 T SomeClass T why do i need the T
运行Demo类将在SomeClass中调用静态方法newInstance来调用构造函数并打印hello

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

newInstance的返回类型是< T> SomeClass< T>对我来说似乎很奇怪
因为我的班级被称为SomeClass< T>而不是< T> SomeClass< T>

why do i need the <T> in front of the SomeClass<T> ?
it seems that if I don’t include it there will be an common error
called Cannot make a static reference to the non-static type T

另一件要指出的是,我可以在< T>之间放置许多空格.和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);
    }
}

解决方法

什么是静态方法?适用于类的方法,而不是特定的实例.类签名公共类SomeClass< T>中的通用参数T.仅适用于特定实例(因此非静态类型T).例如SomeClass的<字符串>其中[T = String].

通过包括< T>在公共静态< T> SomeClass< T>的方法签名中newInstance(Class< T> clazz).你这么说;对于此方法,存在泛型类型参数T.此T与类签名中的T分开.因此它也可以是C,即公共静态< C>. SomeClass的&LT c取代; newInstance(Class< C> clazz).或者完全不同的东西.

但是如果你不包括< T>使用该方法,编译器认为您正在尝试在类签名中使用T.哪个是非法的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读