泛型类声明时不带参数,泛型方法无法检测出参数的不合法?

发布于 2022-09-12 03:41:38 字数 728 浏览 19 评论 0

class Father{

}

class Son extends Father{

}

public class GenericInherit<T> {
    T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public void print(GenericInherit<Father> genericInherit){
        System.out.println(genericInherit);
    }
    
    public static void main(String[] args) {`
   
        GenericInherit<Father> genericInherit = new GenericInherit<>();
        //GenericInherit genericInherit = new GenericInherit<>();
        genericInherit.print(new GenericInherit<Son>());`

    }
}

如果用注释里声明方式,可以顺利运行;按代码的方式,直接IDE就检测出类型问题了。这个方法和泛型类本身的泛型参数T不一样,为什么会出现这种情况?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

山人契 2022-09-19 03:41:38

为了兼容以前没有泛型的旧语法。
如果不使用泛型就不会检测泛型类型

倾听心声的旋律 2022-09-19 03:41:38
  public void print(GenericInherit<Father> genericInherit){
        System.out.println(genericInherit);
    }
    

这个地方可以将入参写为接口,通过调用 getData() 获取 T 这数据

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文