java常见的ide

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

NetBeans 8.0.2

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

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

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

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 。

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

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

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

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

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

类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在这三种常见方法的生成中确实以不同的方式对待数组:
    • 生成的toString()方法在数组上使用Arrays.toString(Array) 。

Eclipse Luna 4.4.1

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

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

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

类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

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

  1. 在三个Java IDE中生成的三种常见方法

    在本文中,我研究了NetBeans 8.0.2 , IntelliJ IDEA 14.0.2和Eclipse Luna 4.4.1生成的三种"通用"方法[ equals(Objec ...

  2. CentOS7安装CDH 第三章:CDH中的问题和解决方法

    CentOS7安装CDH 第三章:CDH中的问题和解决方法 参考文章: (1)CentOS7安装CDH 第三章:CDH中的问题和解决方法 (2)https://www.cnblogs.com/yang ...

  3. JavaScript -- 时光流逝(三):js中的 String 对象的方法

    JavaScript -- 知识点回顾篇(三):js中的 String 对象的方法 (1) anchor(): 创建 HTML 锚. <script type="text/javasc ...

  4. java 常用类库_JAVA(三)JAVA常用类库/JAVA IO

    成鹏致远 |lcw.cnblog.com|2014-02-01 JAVA常用类库 1.StringBuffer StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同, ...

  5. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,

    Java基础入门篇(三)--Java常量.变量, 一.Java常量 (一)什么是常量 常量指的是在程序中固定不变的值,是不能改变的数据.在Java中,常量包括整型常量.浮点型常量.布尔常量.字符常量等 ...

  6. 聊一聊java线程池ThreadPoolExecutor(三)——线程池中是如何执行任务的?

    看到这个图片没?没错,就是一辆教练车!我,一个已经工作了好几年大龄暖男,最终还是走上了学车的道路!环顾周围,同事中几乎都手持驾照了. 早上挤出了一小时,练习科目二,前进,后退,前进,后退!最后小腿感觉 ...

  7. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  8. java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)

    自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java ...

  9. java求最大子串_Java获取两个字符串中最大相同子串的方法

    "abcwerthelloyuiodef" "cvhellobnm" 思路: 1,将短的那个子串按照长度递减的方式获取到. 2,将每获取到的子串去长串中判断是否 ...

最新文章

  1. Machine Learning | (12) 非监督学习-k-means
  2. 码云gitee最大文件限制
  3. Oracle打Patch报错Prerequisite check CheckActiveFilesAndExecutables failed.
  4. 三星电子电容器件识别
  5. Java并发编程:进程和线程之由来
  6. python中configparser_python中confIgparser模块学习
  7. 吴晓波“美好 Plus”携手神策数据,让数据连接文化与商业
  8. 实现带header和footer功能的RecyclerView——完善篇
  9. 最全金蝶KIS记账王使用问题汇总
  10. 移远EC600低功耗唤醒锁wakelock的使用,QuecPython功耗分析
  11. 智慧城市助力城市管理 推动新兴产业升级
  12. python threading之条件变量同步(condition)
  13. html禁止查看图片,强看被屏蔽微信朋友圈
  14. 服务器盘符修改不了怎么办,win10更换盘符报参数错误怎么办_win10系统盘符改不了参数错误解决方法...
  15. HTML语言分栏左右比例怎么调整,wps怎么设置分栏排版?
  16. ASP.net 简单登录界面
  17. 微软官方原版win7(64位/32位)旗舰版系统下载【适合所有品牌】
  18. CANVAS LMS开源系统
  19. WWF(Windows Workflow Foundation)的简介
  20. 什么是mysql时间戳_什么是mysql 的时间戳

热门文章

  1. 【树链剖分】【倍增】宝石(2021GDOI Day2 T1)
  2. NOI2021模拟测试赛 解题报告
  3. Hadoop入门(十四)Mapreduce的数据去重程序
  4. Hadoop入门(六)Mapreduce
  5. JavaFX8 modena样式(css)源码
  6. MySQL dayofweek()函数
  7. Java并发包:ConcurrentMap
  8. 高级JAVA码农必须搞清楚它们的区别:instanceof、isInstance、isAssignableFrom
  9. SpringCloudGateway起步
  10. 代码调用NullPointerException(NPE)