class Animal<T extends Animal> {
    private Cook<T> cook = new Cook<T>();    public void call(){
        cook.call((T) this);
    }
}public class Cook<T extends Animal>{
    public void call(T target){
        System.out.println(target.getClass);
    }
}
筒子们,上面第一个类中,cook.call((T) this)会有unchecked警告,但是已经民却表明T是自己的子类了。为什么自己强转成子类,还会有类型检查的警告呢?感觉上这一行不会抛出运行时异常啊。

解决方案 »

  1.   

    不明白你为什么要用泛型,直接用ANIMAL 就可以。
    泛型应该用在包装类上面。class Animal {
        private Cook cook = new Cook();
     
        public void call(){
            cook.call(this);
        }
    }
     
    public class Cook{
        public void call(Animal target){
            System.out.println(target.getClass());
        }
    }
      

  2.   

    这是个测试代码,完整的是因为Cook内部有部分成员依赖外部传递的类型参数,最后嵌套到Animal这一层,导致了很奇怪的泛型定义。
      

  3.   

    我的代码可能有些一楼,Animal实际应该是抽象的。也就是说用于转型的必然是子类。除非是这个this是一个抽象类的实例,才有可能是父类转子类的呢。