java您(几乎)总是在类中实现哪些方法和接口?
您总是在类中实现哪些方法和接口
是否总是重写equals()?如果您这样做,您是否也执行hashcode()?toString()?您是否养成了实现类似接口的习惯
我刚刚编写了一些代码,需要实现compareTo()和override equals(),以使程序正常工作;我现在开始发现在任何地方使用这些的方法
你们怎么想
你可以在下面搜索框中键入要查询的问题!
您总是在类中实现哪些方法和接口
是否总是重写equals()?如果您这样做,您是否也执行hashcode()?toString()?您是否养成了实现类似接口的习惯
我刚刚编写了一些代码,需要实现compareTo()和override equals(),以使程序正常工作;我现在开始发现在任何地方使用这些的方法
你们怎么想
# 1 楼答案
几乎总是toString(),调试和阅读有关对象的内容是一件痛苦的事情Class@123456
需要时等于()和hashCode(),但总是两者都有或两者都没有
Iterable接口对类似集合的类很有用,通常只返回类似innerCollection的内容。迭代器()。可比性也很有用
此外,我们公司创建了一些我经常使用的接口,比如Displayable(比如toString,但提供更多或其他类型的信息,比如日志记录)和ParseLocatable(对于来自我们解析的文件的内容,我们希望看到在哪个文件和哪行定义了特定规则(有点像stacktraces)
# 2 楼答案
我认为你永远不应该实现你不需要的东西,或者不确定你是否需要它们。如果它不能给你的代码增加价值,就不要把它放进去。如果您希望使(单元)测试与代码保持同步,并使用它们来显示代码的用例,那么您不应该有那些测试未涵盖的内容。这包括equals()、hashCode()、compareTo()等
我看到的问题,除了可能浪费时间之外,是它会让阅读代码的人感到困惑。“为什么这个类实现了equals?它是一些数据值吗?它可以是集合的一部分吗?比较这个类的实例是否有意义?”
所以我想说,只有在你真正需要的时候才能实现这些。因此,我不能说我总是实现这个和那个方法。也许toString()是我写得最多的方法,因为它在调试中非常有用
# 3 楼答案
如果您重写
equals
,您(几乎总是)必须重写hashCode
hashCode
的约定是两个相等的对象必须具有相同的哈希代码。如果重写equals,使得equality基于系统标识哈希代码之外的内容,则两个对象可能彼此相等,但具有不同的哈希代码# 4 楼答案
除非我需要,否则我通常不会提前实施
如果我的类包含数据成员,并且我计划将其存储在某个地方,我通常会实现equals、hashCode和comparable
但是,我发现我的大多数类都没有这个问题,所以没有必要这样做。例如,如果您的类围绕其他对象上的功能而不是数据,那么为什么还要麻烦呢?如果您有一个实例或是按层次结构组织的(例如,GUI小部件或窗口),为什么要麻烦呢
不要实现您不需要的东西,但始终确保检查它们是否需要,因为Java通常不会警告您
另外,确保使用IDE或类似ApacheCommons的东西来生成这些函数。很少需要手工编写代码
至于toString,我很少实现它,直到我发现自己正在调试并且需要在Eclipse调试器中有更好的表示(例如,代替对象ID)。我害怕隐式转换,在生成输出时从不使用toString
# 5 楼答案
(几乎)总是
toString()
它通常有助于调试目的
# 6 楼答案
Effective Java有一章介绍如何以及何时实现toString、equals、hashCode、Comparable等。强烈推荐阅读