Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何教eclipse从jdk 7对象类生成compact equals()和hashCode()?_Java_Eclipse_Equals_Hashcode - Fatal编程技术网

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

Java 如何教eclipse从jdk 7对象类生成compact equals()和hashCode()?,java,eclipse,equals,hashcode,Java,Eclipse,Equals,Hashcode,几天前,我们在公司内部切换到了Java7——终于!Jay\o/所以我发现了对象类,并惊讶地发现hashCode()和equals()方法实现得如此之短,与eclipse默认生成的boylerplate代码相比(ALT+SHIFT+S-->H)减少了很多 我想知道是否可以更改eclipse生成的hashCode()和equals()的默认行为 我很想看到这个: @Override public int hashCode() { return Objects.hash(one, two, thr

几天前,我们在公司内部切换到了Java7——终于!Jay\o/所以我发现了
对象
类,并惊讶地发现
hashCode()
equals()
方法实现得如此之短,与eclipse默认生成的boylerplate代码相比(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()
。这是我从你那里得到的


如何最好地实现这一点,有什么想法吗?

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

您可以在其中创建新模板。该模式可能看起来像:

@Override
public int hashCode()
{
     return Objects.hash(one, two, three, four/*, ...*/);
}
但是,我不确定是否有一个变量可以正确地枚举字段


您可能想看看

有一个新的插件可用,它可以使用java 7功能、apache公共语言库、guava库生成toString()、hashCode()、equals()方法。它有很好的自定义功能。请找到下面的链接来安装插件。 安装完成后,只需右键单击->Jenorate->其他选项


链接-

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

下面是Source>Generate hashCode()和equals中新选项的概述。。。工具:

这已于2018年9月在Eclipse 4.9中正式发布。只需下载最新版本的Eclipse(可以找到下载),或通过以下更新站点安装最新的可用软件:


除了这个新特性之外,阵列现在处理得更巧妙了。在许多情况下,生成将使用
Arrays.deepHashCode
Arrays.deepEquals
方法,在这些情况下,它以前会错误地选择标准
数组.hashCode
Arrays.equals
替代方法。

对于“Generate toString()”可以在wizzard页面上定义模板。你应该在网站上提交一张罚单,也许将来他们会为eq+hashcode添加类似的内容。如果你这样做了,请给我一张喜欢的票,这样每个感兴趣的人都可以投票!如果不想看到,也可以折叠
hashCode()
函数。我认为,在将来所有可能的情况下,考虑默认实现是否是您想要的是一个好主意。如果默认使用速记表达式,您将放弃灵活调整
hashCode
(当然不是不可逆转的),如果您希望/需要这样做的话。有关哈希函数的讨论,请参阅。我已将此增强功能记录在日志中。投赞成票!2年后,仍然没有任何变化。甚至没有人对报告的bug发表评论。最好的解决方案是只使用IntelliJ。您也可以使用apache commons中的Builder:不幸的是,模板系统不支持枚举字段(类似于${Enclosuring_method_arguments},如果存在,可能是${Enclosuring_type_fields})。即使您编写了一个模板来自动生成样板文件,您仍然必须在
hash()
方法中手动填写字段名。我不知道为什么hashCode和equals模板没有列在Java>CodeStyle>CodeTemplates中……不幸的是,这个插件有一个bug,如果你有一个超类,它不能正确生成hashCode和equals。