5 回答

TA貢獻1853條經驗 獲得超18個贊
您可以投射到 a 并調用 和 :objPair<?, ?>equalsfirstsecond
Pair<?, ?> other = (Pair<?, ?>) obj;
return other.first.equals(first) && other.first.equals(second);
這樣,類型檢查將由 和 處理,無論和是什么。T.equalsU.equalsTU

TA貢獻1712條經驗 獲得超3個贊
你可以這樣寫你的方法:equals
@Override
public boolean equals(Object object) {
boolean equal = false;
if(this == object){
equal = true;
} else if(object instanceof Pair<?, ?>) {
// Check that object is an instance of Pair<?, ?>, this will also null check.
// Then just case object to Pair<?, ?> like.
Pair<?, ?> pair = (Pair<?, ?>) object;
if(((this.first == null && pair.first == null) || (this.first != null && this.first.equals(pair.first))) &&
((this.second == null && pair.second == null) || (this.second != null && this.second.equals(pair.second)))){
equal = true;
}
}
return equal;
介于 之間有點像通配符,它實際上被歸類為無界通配符;這意味著尚未指定類的類型。?<>
將檢查兩件事,首先它將檢查對象是否不為空,因此為您創建安全性,然后它將檢查該對象是否為類型。object instanceof Pair<?, ?>nullPair<?, ?>
您可以在此處閱讀有關通配符的信息
根據,如果您要覆蓋,也不要忘記覆蓋。ntalbsequalshashCode
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashcode;
result = result * prime + (this.first == null ? 0 : this.first.hashCode());
result = result * prime + (this.second == null ? 0 : this.second.hashCode());
return result;
}
為什么當我覆蓋等于時,我必須覆蓋哈希碼?
您必須覆蓋每個類中覆蓋等于 () 的哈希碼 ()。如果不這樣做,將導致違反 Object.hashCode() 的總協定,這將阻止您的類與所有基于哈希的集合(包括哈希映射、哈希集和哈希表)一起正常運行。

TA貢獻1735條經驗 獲得超5個贊
您可以使用 來檢查對象的類型,然后安全地投射它。instanceof
if(obj instanceof Pair){ Pair other = (Pair) obj; }

TA貢獻1817條經驗 獲得超6個贊
由于泛型類型在編譯時被擦除,因此無法在運行時中檢查該類型。所以你應該把它扔到.Pair<?,?>
如果使用 JDK 7 或更高版本,則還可以在方法中使用。這將簡化代碼,因為您不必擔心是否為 。Objects.equals(..)equalsfirstsecondnull
Pair<?, ?> pair = (Pair<?, ?>) obj;
return Objects.equals(first, pair.first) &&
Objects.equals(second, pair.second);
另外,如果在類中添加了方法,請不要忘記實現。hashCodeequals
@Override
public int hashCode() {
return Objects.hash(first, second);
}

TA貢獻1797條經驗 獲得超6個贊
首先請記住,泛型僅在編譯時處于活動狀態。它們是編譯時檢查的額外層,以確保您不會濫用可以采用不同類型的容器或函數。
還要記住,自Java第一個版本以來,它一直存在,而泛型是在Java 1.5中引入的。因此,對于這種特定方法,您將有一些類型轉換要做,這是很自然的。equals()
轉換對象后,您無論如何都會檢查 的每個元素,因此,如果它們屬于不同的類型,它們也將無法進行相等性檢查。Pair
添加回答
舉報