41

几天前,我们在公司内切换到 Java 7 - 终于!Jay \o/ 所以我发现了这个Objects类,并惊讶于方法hashCode()equals()实现的时间有多短,与默认情况下由 Eclipse 生成的代码(ALT+SHIFT+S --> H)相比,减少了很多代码。

我想知道是否可以更改生成的 eclipse 的默认行为hashCode()equals()

我很想看到这个:

@Override
public int hashCode()
{
  return Objects.hash(one, two, three, four/*, ...*/);
}

而不是这个:

@Override
public int hashCode()
{
  final int prime = 31;
  int result = 1;
  result = prime * result + ((one == null) ? 0 : one.hashCode());
  result = prime * result + ((two == null) ? 0 : two.hashCode());
  result = prime * result + ((three == null) ? 0 : three.hashCode());
  result = prime * result + ((four== null) ? 0 : four.hashCode());
  // ...
  return result;
}

也是如此equals()这是我从中得到的文章。

任何想法如何最好地实现这一点?

4

3 回答 3

19

hashCodeequals使用 Java 7 类的生成现在Objects已在 Eclipse 中实现。早在 2018 年 8 月,我就在处理功能请求424214,不久之后我的贡献被合并到 JDT UI 代码库中(参见提交f543cd6)。

以下是Source > Generate hashCode() and equals...工具中新选项的概述:

生成工具中的新选项

这已于 2018 年 9 月在 Eclipse 4.9 中正式发布。只需下载最新版本的 Eclipse(可在此处找到下载),或使用以下更新站点安装最新可用软件:http: //download.eclipse.org/releases /最新的

除了这个新功能之外,现在数组的处理更加巧妙。这一代将在许多以前错误地偏爱标准和替代方案的情况下使用Arrays.deepHashCode和方法。Arrays.deepEqualsArrays.hashCodeArrays.equals

于 2018-08-09T20:27:44.250 回答
4

在 Eclipse 首选项中,转到 Java > Editor > Templates。

在那里您可以创建一个新模板。该模式可能如下所示:

@Override
public int hashCode()
{
     return Objects.hash(one, two, three, four/*, ...*/);
}

但是,我不确定是否有一个变量可以正确枚举您的字段。

您可能想查看有关这些模板的进一步说明

于 2013-07-22T07:27:42.100 回答
3

有一个新插件可用,它可以使用 java 7 特性、apache 公共语言库、番石榴库生成 toString()、hashCode()、equals() 方法。它具有良好的可定制功能。请找到下面的链接以安装插件。安装好后,右键-> Jenerate -> 不同的选项

链接 - https://marketplace.eclipse.org/content/jenerate

于 2016-07-08T18:59:30.603 回答