如何教 eclipse 从 jdk 7 Objects 类生成 compact equals() 和 hashCode()?

2022-09-01 02:43:37

几天前,我们在我的公司内切换到了Java 7 - 终于!Jay \o/ 所以我发现了这个类,并惊讶于这些方法和实现的短,与默认由eclipse生成的代码相比,减少了大量的boylerplate代码(ALT + SHIFT + S --> H)。ObjectshashCode()equals()

我想知道我是否可以更改生成的日食的默认行为和?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()

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


答案 1

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

以下是“源>生成 hashCode() 并等于...工具中的新选项的概述:

New option in generation tool

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

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


答案 2

在 Eclipse 首选项中,转到 Java >编辑器>模板。

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

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

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

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


推荐