比如 List<A> lst = XXinstance.get("xx") 。假设 get这个方法返回的只是一个List 没有指定泛型,所以IDE中看不出来。 假设实际中是个Map,那么编码时我不知道。在编译的时候这里不报错,运行时如果我用lst.get(0).A'sMethod,这里就报错了。会提示无法将map强转为A。那么我就想知道,在这种List<A> lst 方式声明的场景下,java是不是都在运行时,才把后面get的结果强转为A的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在ArrayList的源码中找到了答案,运行时会强转一下
如你所说,如果get方法被定义为返回List而不是List<A>,那么你会得到一个警告。
如果你不管警告,就得自己确保这个List必须是List<A>或者List<subclassofA>