给定两个Type实例:
Type type1;
Type type2;
如何检查它们是否为equal
?
我调用toString
并比较它们的值,如下:
if (type1.toString().equals(type2.toString())) {
....
}
我用多个嵌套的参数化类型测试了它,到目前为止它似乎是一致的。但是我想知道是否有一种正式的方式来做到这一点。
所有由Java运行时生成的Type
实例都有正确的equals()和hashCode()实现,因此您可以并且应该使用equals()来比较它们。
例如,ParameterizedType
的Javadoc包含:
实现此接口的类的实例必须实现equals()方法,该方法等于共享相同泛型类型声明且具有相同类型参数的任意两个实例。
Class
对象继承了Object
的equals()和hashCode()实现,但这是正确的,因为Class
对象具有引用相等性。
Normal equals()也应该比将类型转换为字符串更快,更节省内存。
除非在为Type
创建的任何类中显式定义toString()
方法,否则每次都将获得false,除非是相同的对象。如果您只是试图将a.equals(b)
用于Type a; Type b;
,这也是正确的:equals()
只比较两个对象的地址值。如果要检查两个不同分配的对象是否包含相同的对应成员变量,则必须在该类中定义equals()
方法。