JAVA中list的泛型问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中list的泛型问题相关的知识,希望对你有一定的参考价值。

比如 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方法,返回时是强转了

如果不指定泛型就是Object类型的,如果指定了泛型,类型不对的话你put都put不进去的

参考技术A 根据我的理解,泛型是只用于编译时的,编译后的代码及运行时都没有具体的泛型信息。
List<A> lst = XXinstance.get("xx"),在这句代码中,泛型只是用于说明lst里面存放的数据类型为A,这样在你编写代码的过程中,如果你写了lst.add(B)类似的代码,编译器或者IDE能知道你写错了,会给你提示,并且无法编译。但是如果你绕过编译时,在运行时使用反射技术运行类似的代码,这时虚拟机就无能为力了。

java的强转机制,就想你说的,只有到了运行时才能发现错误,所以一般在强制转换时,都需要优先判断if(a instanceof A)

以上是关于JAVA中list的泛型问题的主要内容,如果未能解决你的问题,请参考以下文章

获取 java.util.List 的泛型类型

获取 java.util.List 的泛型类型

java 如何获得List的泛型类型

java类的泛型方法调用问题

如何在 C# 的泛型中使用扩展

Java中的泛型