我在Java中发现以下代码非凡:
ArrayList<String> l1 = new ArrayList<String>();
ArrayList<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass()); // true
System.out.println(l2.getClass().isAssignableFrom(l1.getClass())); // true too
//ArrayList<Integer> l3 = l1; // won't compile though
Run Code Online (Sandbox Code Playgroud)
我不太了解"isAssignableFrom"的细节.当然,我希望编译器停止l3 = l2,但它似乎与前一行相矛盾?(我确定这里有微妙的要点,这就是我所追求的:-)
<Blah>编译后,所有信息都被删除了.就字节码而言,它们都属于同一类.
在编译期间,我们会检查它们的一致性和兼容性.
因此,当它检查l2.getClass().isAssignableFrom(l1.getClass())它的说法is ArrayList assignable from ArrayList?,答案是肯定的.但是因为在编译期间它仍然有类型信息,所以不允许.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |