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

muto
  • 5
新手上路,请多包涵
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不一样,为什么会出现这种情况?

评论
阅读 433
2 个回答

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

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

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

撰写回答

登录后参与交流、获取后续更新提醒

宣传栏