如何实现等于为通用对?(How to implement equals for generic pa

2019-08-22 02:41发布

只是为了好玩,我试图用Java实现一个通用的Pair类。 我遇到的麻烦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可以不阻止客户端比较不同类型的参数对的?

Answer 1:

这是否意味着Java可以不阻止客户端比较不同类型的参数对的?

是的,但是这就是问题所在- equals应与任意对象工作。 你想会是什么样子

@Override
public boolean equals(Object o)
{
    if (o instanceof Pair) {
       Pair<?, ?> pair = (Pair<?, ?>) o;
       return _1.equals(pair._1) && _2.equals(pair._2);
    }
    return false;
}

但是,这应该是罚款,只要AB有正确实现equals是采取任意Object秒。



Answer 2:

您不能使用instanceof像你一样,由于类型擦除 。 你可以只检查instanceof Pair
还什么是达与_1_2 ? 真?



Answer 3:

o instanceof Pair<A, B> 

不起作用,因为仿制药是不是有在运行时,所以instanceof不知道他们。



文章来源: How to implement equals for generic pairs?