Java:如何解决缺少Equatable接口的问题?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java:如何解决缺少Equatable接口的问题?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1697字,纯文字阅读大概需要3分钟。
内容图文
![Java:如何解决缺少Equatable接口的问题?](/upload/InfoBanner/zyjiaocheng/766/ca0ee58b781d40f8b936cc18b0410b52.jpg)
据我所知,SortedMap或SortedSet之类的东西在Comparable<?>上使用compareTo(而不是equals).检查相等性的类型(contains,containsKey).
但是,如果某些类型在概念上是等同的,但不具有可比性呢?
(哈希码,内存地址,……)
我必须声明一个Comparator<?>并覆盖方法int compareTo(T o1,To2).好的,我可以为被认为相等的实例返回0.但是,对于非实际情况,当订单不明显时我会返回什么?
使用SortedMap或SortedSet的方法是否相等,但(概念上)不可比的类型好吗?
谢谢!
编辑:
我不想存储已排序的东西,但是我会使用“通常的”Map和Set,我无法“覆盖”相等行为.
编辑2:
为什么我不能只重写equals(…):
我需要改变外国阶级的平等行为.我无法编辑它.
编辑3:
想想.NET:它们具有IEquatable接口,可以改变相等行为,而不会触及可比较的行为.
编辑4:
我不能让compareTo返回0表示相等,1表示不相等的实例吗?什么是大问题?我进行了一些测试,似乎SortedMap / SortedSet在一对实例上调用compareTo一次.是的,订单没有意义,但为什么它应该是我的问题呢?我不需要订单. *我只需要改变平等行为.可悲的是,大多数人都无法理解这一点.
注意:现在证明为非平等实例返回1的概念是错误的.
编辑5:
改变外国阶级的平等行为是一个坏主意吗?当然?我不这么认为:为什么我允许使用Comparator改变外来类的比较行为?
编辑6:
感谢Mark Peters和waxwing,想要将密钥类型包装在自定义类中.这样,我可以覆盖equals和hashCode,从而改变相等行为.
解决方法:
考虑将您的外国课程包装在您自己的内部.
public class Foreign {
// undesired equals() and hashCode() implementation
}
public class ForeignWrapper {
private Foreign foreign;
public ForeignWrapper(Foreign foreign) {
this.foreign = foreign;
}
public void equals() {
// your equals implementation, using fields from foreign
}
public int hashCode() {
// your hashCode implementation, using fields from foreign
}
}
然后将新的ForeignWrapper(外部)添加到标准HashSet / HashMap.不适用于所有情况,但可能适用于您的情况.
内容总结
以上是互联网集市为您收集整理的Java:如何解决缺少Equatable接口的问题?全部内容,希望文章能够帮你解决Java:如何解决缺少Equatable接口的问题?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。