DeepEquals.deepEquals(参考对象,参考)
DeepEquals.deepEquals(refObject, ref)
当我使用两个空列表的 deepEquals 时,它 return 即使两个列表的类型不同也是如此。我知道列表在编译时只有不同的类型,而不是运行时。
但是是否有机会注释该字段或熟悉的内容?
这就是我想要的:
List<Foo> fooList = []
List<Boo> booList = []
DeepEquals.deepEquals(fooList, booList) //I want it to return false, as the list differs on type
在运行时列表显示为 ArrayList 而无需键入
Java 或 Groovy 目前没有解决方案。
您看到 Java 类型擦除在起作用。当泛型被添加到 Java 回到 Java 1.5.
时,决定以这种方式工作
编译出来的class基本上就是List。
每个字段都是该类型的一个实例,并且在运行时实际上都是 List<Object>
。
有关参数类型的信息不再可用。
可以在此处找到类型擦除的更完整解释:
Java generics type erasure: when and what happens?
.NET 等其他运行时确实具有具体化的类型,这意味着 List<Foo>
和 List<Bar>
是两种不同的类型。两种方法各有利弊。
对于 JVM 未来有类似的东西,已经进行了一些讨论和工作。 JVM 语言峰会 (JVMLS) 上的一些演讲表明,John Rose 和其他人一直在考虑使用模板 classes 和类型来尝试解决这个问题。因此 List 将是 class,但 List<Foo>
和 List<Bar>
中的每一个都可能有一个 species
。但是据我所知,如果它真的到来的话,那是几年后的事了。
当我使用两个空列表的 deepEquals 时,它 return 即使两个列表的类型不同也是如此。我知道列表在编译时只有不同的类型,而不是运行时。
但是是否有机会注释该字段或熟悉的内容?
这就是我想要的:
List<Foo> fooList = []
List<Boo> booList = []
DeepEquals.deepEquals(fooList, booList) //I want it to return false, as the list differs on type
在运行时列表显示为 ArrayList 而无需键入
Java 或 Groovy 目前没有解决方案。 您看到 Java 类型擦除在起作用。当泛型被添加到 Java 回到 Java 1.5.
时,决定以这种方式工作编译出来的class基本上就是List。
每个字段都是该类型的一个实例,并且在运行时实际上都是 List<Object>
。
有关参数类型的信息不再可用。
可以在此处找到类型擦除的更完整解释:
Java generics type erasure: when and what happens?
.NET 等其他运行时确实具有具体化的类型,这意味着 List<Foo>
和 List<Bar>
是两种不同的类型。两种方法各有利弊。
对于 JVM 未来有类似的东西,已经进行了一些讨论和工作。 JVM 语言峰会 (JVMLS) 上的一些演讲表明,John Rose 和其他人一直在考虑使用模板 classes 和类型来尝试解决这个问题。因此 List 将是 class,但 List<Foo>
和 List<Bar>
中的每一个都可能有一个 species
。但是据我所知,如果它真的到来的话,那是几年后的事了。