在这篇文章中,我提出了一个使用接口和匿名类的解决方案。但是,要实现一件事:hashCode
andequals
方法。
但是我发现实现接口的匿名类很难实现equals
。在该示例中,接口是Pair<L,R>
,并且工厂方法Pairs.makePair
将为它返回一个匿名实现。假设我添加了一个equals
实现。用户可以使用不同的代码实现他们自己的Pair<L,R>
类equals
,因此调用userobj.equals(makepairobj)
将输入他们的代码,makepairobj.equals(userobj)
并将输入我的代码。因为我无法控制他们的代码,所以很难确保equals
对称,这是良好实现所必需的。
我相信这个问题在其他情况下很常见,所以我想知道这个问题一般是如何解决的?
编辑:在典型的类中,实现equals
将检查参数类型以确保它与自己的相同。这保证只调用实现代码来比较对象。但是,匿名类没有名称,无法使用instanceof
. 我能做的是确保它是实现接口/类的实例。这不足以防止上述情况。