我正在尝试equals为参数化的类重写方法。
equals
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof Tuple)) return false; Tuple<E> other = (Tuple<E>) obj; //unchecked cast if (!a0.equals(other.a0) && !a0.equals(other.a1)) { return false; } if (!a1.equals(other.a1) && !a1.equals(other.a0)) { return false; } return true; }
我如何确保<E>该other对象与相同this?
<E>
other
this
您可以通过保留对Class<E>类型的引用来实现。但是,我认为, 相等性测试应该针对对象表示的值,而不是针对这些值表示的具体类型 。
Class<E>
一个典型的例子是Collections API。 new ArrayList<String>().equals(new LinkedList<Object>())返回true。尽管它们具有完全不同的类型,但是它们表示相同的值,即“空集合”。
new ArrayList<String>().equals(new LinkedList<Object>())
true
就个人而言,Tuple代表一个相同数据(例如("a", "b"))的两个s是否应该不相等,因为一个是类型,Tuple<String>而另一个是类型Tuple<Object>?
Tuple
("a", "b")
Tuple<String>
Tuple<Object>