爲了好玩,我試圖在Java中實現一個通用的Pair類。我無法用equals
:如何爲泛型對實現equals?
public class Pair<A, B>
{
public final A _1;
public final B _2;
// ... unnecessary details left out ...
public boolean equals(Pair<A, B> that)
{
return (_1.equals(that._1)) && (_2.equals(that._2));
}
@Override
public boolean equals(Object o)
{
return (o instanceof Pair<A, B>) && equals((Pair<A, B>) o);
}
}
然而,o instanceof Pair<A, B>
似乎並沒有工作。這是爲什麼?
使用(o instanceof Pair) && equals((Pair<A, B>) o)
給我演員一個警告。擺脫演員陣容中的<A, B>
部分仍然給我一個警告,我想這也是有道理的。
這是否意味着Java無法阻止客戶端將對與不同類型參數進行比較?
難道你不是簡單地問如何使用'instanceof'與paremetrized類型? – djechlin 2013-04-11 19:59:21
我認爲這應該工作,只要'A'和'B'具有良好行爲的'equals()'方法,它應該驗證它們的類是否兼容。問題是'A'和'B'類型在運行時被擦除,在這種情況下本質上被簡化爲'Object'。 – 2013-04-11 19:59:39