有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java您(几乎)总是在类中实现哪些方法和接口?

您总是在类中实现哪些方法和接口

是否总是重写equals()?如果您这样做,您是否也执行hashcode()?toString()?您是否养成了实现类似接口的习惯

我刚刚编写了一些代码,需要实现compareTo()和override equals(),以使程序正常工作;我现在开始发现在任何地方使用这些的方法

你们怎么想


共 (6) 个答案

  1. # 1 楼答案

    几乎总是toString(),调试和阅读有关对象的内容是一件痛苦的事情Class@123456

    需要时等于()和hashCode(),但总是两者都有或两者都没有

    Iterable接口对类似集合的类很有用,通常只返回类似innerCollection的内容。迭代器()。可比性也很有用

    此外,我们公司创建了一些我经常使用的接口,比如Displayable(比如toString,但提供更多或其他类型的信息,比如日志记录)和ParseLocatable(对于来自我们解析的文件的内容,我们希望看到在哪个文件和哪行定义了特定规则(有点像stacktraces)

  2. # 2 楼答案

    我认为你永远不应该实现你不需要的东西,或者不确定你是否需要它们。如果它不能给你的代码增加价值,就不要把它放进去。如果您希望使(单元)测试与代码保持同步,并使用它们来显示代码的用例,那么您不应该有那些测试未涵盖的内容。这包括equals()、hashCode()、compareTo()等

    我看到的问题,除了可能浪费时间之外,是它会让阅读代码的人感到困惑。“为什么这个类实现了equals?它是一些数据值吗?它可以是集合的一部分吗?比较这个类的实例是否有意义?”

    所以我想说,只有在你真正需要的时候才能实现这些。因此,我不能说我总是实现这个和那个方法。也许toString()是我写得最多的方法,因为它在调试中非常有用

  3. # 3 楼答案

    如果您重写equals,您(几乎总是)必须重写hashCodehashCode的约定是两个相等的对象必须具有相同的哈希代码。如果重写equals,使得equality基于系统标识哈希代码之外的内容,则两个对象可能彼此相等,但具有不同的哈希代码

  4. # 4 楼答案

    除非我需要,否则我通常不会提前实施

    如果我的类包含数据成员,并且我计划将其存储在某个地方,我通常会实现equals、hashCode和comparable

    但是,我发现我的大多数类都没有这个问题,所以没有必要这样做。例如,如果您的类围绕其他对象上的功能而不是数据,那么为什么还要麻烦呢?如果您有一个实例或是按层次结构组织的(例如,GUI小部件或窗口),为什么要麻烦呢

    不要实现您不需要的东西,但始终确保检查它们是否需要,因为Java通常不会警告您

    另外,确保使用IDE或类似ApacheCommons的东西来生成这些函数。很少需要手工编写代码

    至于toString,我很少实现它,直到我发现自己正在调试并且需要在Eclipse调试器中有更好的表示(例如,代替对象ID)。我害怕隐式转换,在生成输出时从不使用toString

  5. # 5 楼答案

    (几乎)总是toString()

    它通常有助于调试目的

  6. # 6 楼答案

    Effective Java有一章介绍如何以及何时实现toString、equals、hashCode、Comparable等。强烈推荐阅读