如何比较Type的实例是否相等

时间:2016-06-24 15:40:42

标签: java reflection

鉴于Type的两个实例:

Type type1;
Type type2;

如何检查它们是否为equal

我正在调用toString并比较它们的值,如下:

if (type1.toString().equals(type2.toString())) {
    ....
}

我用多个嵌套的参数化类型测试它,到目前为止它似乎是一致的。但我想知道是否有正式的方法来做到这一点。

2 个答案:

答案 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()方法。