【发布时间】:2017-01-15 15:15:25
【问题描述】:
首先,由于 java 有严格的类型系统,程序在编译时检查类型正确性,并在执行前将类加载到字节码验证器时检查程序的字节码。
虽然泛型的引入拓宽了Java类型系统的潜力,但是由于java有子类型,所以在上面的例子中出现了很多问题:
String [] a ={"Hello"};
Object [] b= a;
b[0]= false;
String s=a[0];
System.out.println(s);
在上面的例子中,我们使用 String 类是 Object 的子类。 我的问题是编译器没有对上述程序产生任何警告的原因是什么。当我尝试运行它时(当然)会引发异常。 此外,上述程序在 java 实现中可能存在哪些问题/后果(我的意思是有什么明显的问题吗??)。
【问题讨论】:
-
您可以从阅读 Bracha 的泛型教程开始。
-
关于问题本身,这是一个重复:stackoverflow.com/questions/18666710/…
-
如果你想进行一些高级别的 Arch 讨论,programmers.se 似乎更适合这类问题。
-
如果你想知道关于java类型系统的JVM impl的一些very具体细节,你应该用
jvm标签询问very具体问题. -
这个问题与泛型无关,因为您谈论的是作为 Java 语言自然组成部分的数组。泛型是 java 1.5 中添加的一项功能,允许您创建具有特定类型的数据结构,例如 ArrayList 和 Trees:ArrayList
、Tree
标签: java generics types programming-languages