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