java - DeepEquals.deepEquals(refObject, ref)

标签 java grails groovy

当我使用两个空列表的 deepEquals 时,即使两个列表的类型不同,它也会返回 true。我知道列表仅在编译时具有不同类型,而不是运行时。

但是有机会注释字段或熟悉的东西吗?

这就是我想要的:

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 1.5 中将泛型添加到 Java 中时,就做出了这样的决定。

基本上编译后的类是List。 每个字段都是该类型的一个实例,并且实际上都是 List<Object>在运行时。 有关参数类型的信息根本不再可用。 类型删除的更完整解释可以在这里找到: Java generics type erasure: when and what happens?

其他运行时(例如 .NET)确实具有具体化类型,这意味着 List<Foo>List<Bar>是两种不同的类型。两种方法各有利弊。

对于 JVM future 有类似的东西已经进行了一些讨论和工作。 JVM 语言峰会 (JVMLS) 上的一些演讲表明,John Rose 和其他人一直在考虑使用模板类和类型种类来尝试解决此问题。所以 List 就是类,但可能有 species对于每个 List<Foo>List<Bar> 。但据我所知,如果它真的到来的话,还需要几年的时间。

关于java - DeepEquals.deepEquals(refObject, ref),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51628769/

相关文章:

java - 使用 Rest Services、Java 和 Angular JS 将存储在 Mysql 数据库中的图像显示为 Blob

java - 创建和调用涉及多个 System.out.println() 和变量的方法

grails - 如何在单元测试中针对Spring Security验证用户身份

多种形式的 Grails GORM

java - 如何在EDT(Swing)中依次执行多个方法

java - Apache HttpClient 获取服务器证书

mysql - Grails 子查询

hibernate - 为什么我得到 Grails SessionFactoryProxy?

groovy - 有人可以解释一下 geb 页面内容 DSL 中的语法吗?

grails - Grails拒绝值[null]