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。但是据我所知,如果它真的到来的话,那是几年后的事了。