当前位置: 首页 > 面试题库 >

接口中的toString(),equals()和hashCode()

翟弘
2023-03-14
问题内容

因此,我有一个带有一堆需要实现的方法的接口,这些方法的名称无关紧要。

实现此接口的对象通常放入集合中,并且具有我希望它们使用的特殊toString()格式。

因此,我认为将hashCode(),equals()和toString()放入接口将很方便,以确保我记得重写这些默认方法。但是,当我将这些方法添加到接口中时,即使没有明确实现这三个方法,IDE
/ Compiler也不会抱怨,即使我将它们明确地放在接口中也是如此。

为什么不为我强制html" target="_blank">执行?如果我没有实现其他任何方法,它会抱怨,但是它不会强制执行这三个方法。是什么赋予了?有什么线索吗?


问题答案:

Java中的所有对象都继承自Object,java.lang.Object而Object提供了这些方法的默认实现。

如果您的接口包含其他方法,则Java会抱怨您没有通过提供这些方法的实现来完全实现该接口。但在的情况下equals()hashCode()toString()(以及其他一些你没有提到)的实施已经存在。

您可能能够实现所需目标的一种方法是,在界面中提供不同的方法(例如,toPrettyString()类似方法)。然后,您可以调用该方法而不是默认toString()方法。



 类似资料:
  • 本文向大家介绍Java中替代equals,compareTo和toString的方法,包括了Java中替代equals,compareTo和toString的方法的使用技巧和注意事项,需要的朋友参考一下 我们都曾在POJO中重写过equals(),compareTo()和toString()方法。但是另有其他能做到职责分离的更好的方法并带来更简洁的代码。阅读这篇文章来一探究竟吧! 更简明的职责——

  • 我试图使用Java以编程方式从XSD文件生成JAXB类。我使用以下代码片段来实现这一点: 生成的类只包含字段的方法。但是,我还希望包括、和方法。如何在生成代码时做到这一点?

  • 问题内容: 如何使用没有方法的interface的引用变量调用方法? 问题答案: 在该 Java文档说… 。 这就是为什么您可以在接口引用上调用方法的原因

  • 问题内容: 鉴于这种: 输出为: 这是为每个对象提供false,但每个String对象的哈希码都相同。为什么会这样呢? 问题答案: 确实比较 对象的 真实相等性(我的意思是-两个引用都指向同一个对象),而不是它们的内容,而比较内容(至少对于String)。 并指向不同的对象。 还要注意,如果对象相等,则它们的哈希必须相同,但是如果哈希码相同,则并不意味着对象相等。

  • 问题内容: Bert Bates和Kathy Sierra的SCJP 6学习指南在第554页中指出(除其他要求外) x.hashCode()!= y.hashCode()要求x.equals(y)== false 。 但是Javadoc for Object并未明确提及此类要求。Quote: 如果根据equals(Object)方法,两个对象相等,则在两个对象中的每个对象上调用hashCode方法

  • 为什么在实现Comparator接口时不需要重写equals()方法?comparator中的equals()既不是静态的,也不是默认的。 在同一行中,我还想问,当Comparator有两个抽象方法compare()和equals()时,它是如何作为一个函数接口的?