为了好玩,我试图在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