zvxlckv 2021-11-09 21:53 采纳率: 0%
浏览 15

泛型类中可以任意修改已经指定后的类型吗?

public class Demo {
    public static void main(String[] args) {
        Test<Dog> t1 = new Test<>(); //在这里我已经将t1中的a指定为Dog类型
//执行fun1修改其中的a类型为Cat类型,这里Dog和Cat没有继承关系不应该发生类型转换异常吗? 
        t1.fun1(t1); //正常运行,没有报任何错误。
        System.out.println(t1.a); //输出为Cat
    }
}
@SuppressWarnings("all")
class Test<E> {
    E a;
    <T extends Test> void fun1(T t) {
        t.a = new Cat();
    }
}
class Dog { }
class Cat { }
  • 写回答

2条回答 默认 最新

  • Tomshidi 2021-11-09 22:12
    关注

    泛型在编译后都是用Object替代,所以你传啥都不会报错。
    但是如果你Dog里有一个run方法,Cat里有一个walk方法,你的func1方法里如果想要用Dog的run或者Cat的walk,就需要先使用instance of判断a的实际类型了。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月9日

悬赏问题

  • ¥15 微生物组数据分析--微生物代谢物
  • ¥30 求一跃动小子保卫主公Java算法实现
  • ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)
  • ¥20 物理远程控制麦克风使用问题
  • ¥15 打印预览会泄漏纸钱包密码吗
  • ¥15 在hololens1上运行unity项目只有空窗口
  • ¥25 TABLEAU PREP无法打开
  • ¥15 百度帐号问题/centos
  • ¥15 关于#c语言#的问题:求完整代码条件好说
  • ¥100 HALCON DELPHI