Java 泛型,来自 C++ 模板

标签 java generics

我发现以下 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

我不太明白“isAssignableFrom”的细节。当然,我希望编译器停止l3 = l2,但这似乎与上一行矛盾? (我敢肯定这里有一些微妙的地方,这就是我所追求的:-)

最佳答案

所有 <Blah>信息在编译时间后被剥离。就字节码而言,它们都是同一个类。

在编译过程中,会检查它们的一致性和兼容性。

所以当它检查 l2.getClass().isAssignableFrom(l1.getClass()) 时它在说 is ArrayList assignable from ArrayList?答案是肯定的。但是因为在编译过程中它仍然有类型信息,所以这是不允许的。

关于Java 泛型,来自 C++ 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451127/

相关文章:

c# - 如何在没有具体实例的情况下使用反射获取类型的静态属性的值

c# - List<T>.Find 抛出 System.IndexOutOfRangeException

c# - IObservable 的无效转换,运行时异常

java - Java中 float 的最大值?

java - 如何将服务器设置为 "deploy"以便可以通过 Internet 访问它?

java - ObjectMapper - 向 yaml 文件添加新值

java - 我应该为货币/金钱使用哪种 XML 数据类型?

java - 扫描仪跳过文件中的每一行

c# - 通用/类型安全的 ICommand 实现?

c# 泛型,类型略有不同?