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

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不一样,为什么会出现这种情况?

阅读 2.4k
2 个回答

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

  public void print(GenericInherit<Father> genericInherit){
        System.out.println(genericInherit);
    }
    

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题