java常见的ide_在三个Java IDE中生成的三种常见方法

java常见的ide

在本文中,我研究了NetBeans 8.0.2IntelliJ IDEA 14.0.2Eclipse Luna 4.4.1生成的三种“通用”方法[ equals(Object)hashCode()toString() ]的区别 。 。 目的不是确定哪种方法最好,而是要说明可以用于实现这些通用方法的不同方法。 在此过程中,可以基于IDE的假设收集一些有趣的见解,以创建这些通用方法,并提示开发人员进行设置。



NetBeans 8.0.2

netbeans802

NetBeans 8.0.2允许将项目属性配置为支持JDK 8平台,并期望JDK 8源格式,如以下两个屏幕快照所示。

netbeans802_projectProperties_Libraries_JavaPlatform8

netbeans802_projectProperties_Sources_sourceFormat8

在NetBeans 8.0.2中,通过单击“源” |“生成”来生成代码。 插入代码(或击键Alt + Insert)。

netbeans802_source_insertCode_alt插入

在生成方法equals(Object)hashCode()toString() ,NetBeans 8.0.2要求在每个生成的方法中使用属性,如以下两个屏幕快照所示。

netbeans802_generateEqualsAndHashCode

netbeans802_generateToString

NetBeans生成的方法利用了JDK 7引入的 Objects类。

NetBeans802NetratedCommonMethods.java类的NetBeans生成的hashCode()方法
@Override
public int hashCode()
{
   int hash = 5;
   hash = 29 * hash + Objects.hashCode(this.someString);
   hash = 29 * hash + Objects.hashCode(this.timeUnit);
   hash = 29 * hash + this.integer;
   hash = 29 * hash + Objects.hashCode(this.longValue);
   return hash;
}
NetBeans802NetratedCommonMethods.java类的NetBeans生成的equals(Object)方法
@Override
public boolean equals(Object obj)
{
   if (obj == null)
   {
      return false;
   }
   if (getClass() != obj.getClass())
   {
      return false;
   }
   final NetBeans802GeneratedCommonMethods other = (NetBeans802GeneratedCommonMethods) obj;
   if (!Objects.equals(this.someString, other.someString))
   {
      return false;
   }
   if (this.timeUnit != other.timeUnit)
   {
      return false;
   }
   if (this.integer != other.integer)
   {
      return false;
   }
   if (!Objects.equals(this.longValue, other.longValue))
   {
      return false;
   }
   return true;
}
NetBeans802NetratedCommonMethods.java类的NetBeans生成的toString()方法
@Override
public String toString()
{
   return "NetBeans802GeneratedCommonMethods{" + "someString=" + someString + ", timeUnit=" + timeUnit + ", integer=" + integer + ", longValue=" + longValue + '}';
}

关于NetBeans生成的通用方法,可以观察到以下几点:

  • 除操作员选择的方法中使用的字段外,所有生成的代码都是自动的,不支持自定义。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 没有Javadoc文档包含生成的方法。
  • 这些方法利用Objects类使生成的代码更简洁,而对null检查的需求则更少。
  • toString()生成的String仅支持一种格式,并且该输出格式为单个逗号分隔的行。
  • 我没有在上面的示例中显示它,但是在某些情况下,NetBeans 8.0.2的方法生成确实将数组与引用,枚举和基元区别对待:
    • 生成的toString()方法像对待其他实例属性一样对待实例的数组属性:它依赖于数组的toString() ,这通常导致不希望的且通常无用的结果(数组的系统标识哈希码 )。

IntelliJ IDEA 14.0.2

对于这些示例,我正在使用IntelliJ IDEA 14.0.2 Community Edition

idea_1402

IntelliJ IDEA 14.0.2提供了配置项目结构以期望JDK 8的“语言级别”的能力。

idea14_ProjectStructure_LanguageLevel_8

要在IntelliJ IDEA 14.0.2中生成代码,可以使用Code | 生成选项(或击键Alt + Insert(如NetBeans))。

idea14_codeGenerateAltInsert

IntelliJ IDEA 14.0.2提示操作员应在生成的方法中包括哪些属性。 它还询问哪些字段非空,这意味着假定哪些字段永远不会为空。 在此处显示的快照中,将对它们进行检查,这将导致方法在尝试访问它们之前不检查这些属性是否为null。 但是,在我用IntelliJ IDEA为本章生成的代码中,我将没有选中这些代码,这意味着IntelliJ IDEA将在生成的方法中访问它们之前检查null。

idea14_codeGenerateEqualsAndHashCode_Equals

idea14_codeGenerateEqualsAndHashCode_HashCode

idea14_codeGenerateEqualsAndHashCode_NotNull

IntelliJ IDEA 14.0.2的toString()生成为生成的toString()方法提供了冗长的格式(模板)列表。

idea14_codeGenerateToStringTemplateOptions

IntelliJ IDEA 14.0.2还允许操作员选择要包含在生成的toString()方法中的属性(突出显示的背景为蓝色时选择)。

idea14_codeGenerateToStringHighlightedAttributesBlueBackground

类Idea1402GeneratedCommonMethods.java的IDEA生成的equals(Object)方法
public boolean equals(Object o)
{
   if (this == o) return true;
   if (o == null || getClass() != o.getClass()) return false;

   Idea1402GeneratedCommonMethods that = (Idea1402GeneratedCommonMethods) o;

   if (integer != that.integer) return false;
   if (longValue != null ? !longValue.equals(that.longValue) : that.longValue != null) return false;
   if (someString != null ? !someString.equals(that.someString) : that.someString != null) return false;
   if (timeUnit != that.timeUnit) return false;

   return true;
}
类Idea1402GeneratedCommonMethods.java的IDEA生成的hashCode()方法
@Override
public int hashCode()
{
   int result = someString != null ? someString.hashCode() : 0;
   result = 31 * result + (timeUnit != null ? timeUnit.hashCode() : 0);
   result = 31 * result + integer;
   result = 31 * result + (longValue != null ? longValue.hashCode() : 0);
   return result;
}
类Idea1402GeneratedCommonMethods.java的IDEA生成的toString()方法
@Override
public String toString()
{
   return "Idea1402GeneratedCommonMethods{" +
      "someString='" + someString + '\'' +
      ", timeUnit=" + timeUnit +
      ", integer=" + integer +
      ", longValue=" + longValue +
      '}';
}

可以观察到有关IntelliJ IDEA生成的常见方法:

  • 大多数生成的代码都是自动的,并且具有少量可用的自定义功能,包括操作员选择的方法中使用的字段,期望哪些字段为非空的规范(以便在生成的代码中不需要空检查)以及选择的能力八种内置toString()格式之一。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 没有Javadoc文档包含生成的方法。
  • 生成的方法不使用Objects类,因此需要对所有可能为null的引用进行显式检查是否为null。
  • 上面的示例中没有显示,但是IntelliJ IDEA 14.0.2在这三种常见方法的生成中确实以不同的方式对待数组:

Eclipse Luna 4.4.1

Eclipse

Eclipse Luna 4.4.1允许将“项目属性”中的Java编译器设置为JDK 8。

eclipse441_ProjectProperties_JavaCompiler

在Eclipse Luna中,开发人员使用“源”下拉菜单选择要执行的特定类型的源代码生成。

eclipse441_Source_GenerateHashCodeAndEquals

Eclipse Luna允许操作员选择要包含在常用方法中的属性。 它还允许操作员指定所生成方法的一些特征。 例如,操作员可以选择在生成的toString()方法中单独打印数组的元素,而不是使用通常无意义的类名和系统标识哈希码。

eclipse441_GenerateHashCodeEquals

eclipse441_GenerateToString

类Eclipse441GeneratedCommonMethods.java的Eclipse生成的hashCode()方法
/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode()
{
   final int prime = 31;
   int result = 1;
   result = prime * result + this.integer;
   result = prime * result
         + ((this.longValue == null) ? 0 : this.longValue.hashCode());
   result = prime * result
         + ((this.someString == null) ? 0 : this.someString.hashCode());
   result = prime * result
         + ((this.timeUnit == null) ? 0 : this.timeUnit.hashCode());    return result;
}
类Eclipse441GeneratedCommonMethods.java的Eclipse生成的equals(Object)方法
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj)
{
   if (this == obj)
      return true;
   if (obj == null)
      return false;
   if (getClass() != obj.getClass())
      return false;
   Eclipse441GeneratedCommonMethods other = (Eclipse441GeneratedCommonMethods) obj;
   if (this.integer != other.integer)
      return false;
   if (this.longValue == null)
   {
      if (other.longValue != null)
         return false;
   } else if (!this.longValue.equals(other.longValue))
     return false;
   if (this.someString == null)
   {
      if (other.someString != null)
         return false;
   } else if (!this.someString.equals(other.someString))
      return false;
   if (this.timeUnit != other.timeUnit)
      return false;
   return true;
}
类Eclipse441GeneratedCommonMethods.java的Eclipse生成的toString()方法
/* (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString()
{
   return "Eclipse441GeneratedCommonMethods [someString=" + this.someString
         + ", timeUnit=" + this.timeUnit + ", integer=" + this.integer
         + ", longValue=" + this.longValue + "]";
}

关于Eclipse生成的通用方法,可以观察到以下几点:

  • Eclipse在生成过程中提供了最多的点,可以在其中配置所生成的输出。 以下是一些可配置的选项:
    • 可以明确指定类中的位置(在类的现有方法之前或之后)。
  • 所有这些扩展Object类中对应项的通用方法都会自动提供@Override注释。
  • 生成的方法不使用Objects类,因此需要对所有可能为null的引用进行显式检查是否为null。
  • 当生成本文中突出显示的三种常用方法时,Eclipse Luna 4.4.1确实会以不同的方式对待数组:
    • 生成的toString()可以选择使用Arrays.toString(Object[])或重载版本来访问数组的内容。

结论

这篇文章中介绍的所有三个IDE(NetBeans,IntelliJ IDEA和Eclipse)都会生成常见方法equals(Object)hashCode()toString()合理实现,但是这些生成的方法在可定制性之间存在差异。三个IDE。 可用的不同定制和生成的不同实现可以为Java新手提供课程,以了解和考虑实现这些方法。 虽然这些IDE生成这些方法的能力最明显和最显着的优点是与自动生成相关的时间节省,但是这些方法的IDE生成的其他优点包括能够学习实现这些方法的能力以及成功实现的可能性更大。没有错别字或其他错误。

翻译自: https://www.javacodegeeks.com/2014/12/three-common-methods-generated-in-three-java-ides.html

java常见的ide

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值