Rac*_*gon 5 java oop collections
我们最近在代码中遇到了一个与OOP概念基本相关的错误.
class ABC
{
String a;
ABC(){
a = "abc";
}
}
public class Main {
static Object listABC() {
List<ABC> listOfABC = new ArrayList<>();
listOfABC.add(new ABC());
return listOfABC;
}
public static void main(String[] args) throws java.lang.Exception {
List<Long> listLong = (List) Main.listABC();
System.out.println(listLong.get(0));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:ABC @ 642c39d2
这不应该引发运行时异常吗?有人能指出我正确的方向,为什么这个代码不会引发异常?
通用类型将被删除,并且在您的示例中,有关它们的信息在运行时不再存在.他们只是编译辅助工具.将List <T>转换为List也会在编译时丢弃有关类型的信息,尽管它仍然是有效的强制转换.
因此,只要您在每一步都进行合法演员表,那么它就可以正常编译.在运行时,列表中的类型信息已经消失.
如果你试图将get(0)强制转换为Long,那么你会得到一个classcastexception,因为该项本身就是一个ABC.
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |