java常见的ide_在三个Java IDE中生成的三种常见方法
java常見的ide
在本文中,我研究了NetBeans 8.0.2 , IntelliJ IDEA 14.0.2和Eclipse Luna 4.4.1生成的三種“通用”方法[ equals(Object) , hashCode()和toString() ]的區(qū)別 。 。 目的不是確定哪種方法最好,而是要說明可以用于實(shí)現(xiàn)這些通用方法的不同方法。 在此過程中,可以基于IDE的假設(shè)收集一些有趣的見解,以創(chuàng)建這些通用方法,并提示開發(fā)人員進(jìn)行設(shè)置。
NetBeans 8.0.2
NetBeans 8.0.2允許將項(xiàng)目屬性配置為支持JDK 8平臺(tái),并期望JDK 8源格式,如以下兩個(gè)屏幕快照所示。
在NetBeans 8.0.2中,通過單擊“源” |“生成”來生成代碼。 插入代碼(或擊鍵Alt + Insert)。
在生成方法equals(Object) , hashCode()和toString() ,NetBeans 8.0.2要求在每個(gè)生成的方法中使用屬性,如以下兩個(gè)屏幕快照所示。
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 + '}'; }關(guān)于NetBeans生成的通用方法,可以觀察到以下幾點(diǎn):
- 除操作員選擇的方法中使用的字段外,所有生成的代碼都是自動(dòng)的,不支持自定義。
- 所有這些擴(kuò)展Object類中對(duì)應(yīng)項(xiàng)的通用方法都會(huì)自動(dòng)提供@Override注釋。
- 沒有Javadoc文檔包含生成的方法。
- 這些方法利用Objects類使生成的代碼更簡潔,而對(duì)null檢查的需求則更少。
- toString()生成的String僅支持一種格式,并且該輸出格式為單個(gè)逗號(hào)分隔的行。
- 我沒有在上面的示例中顯示它,但是在某些情況下,NetBeans 8.0.2的方法生成確實(shí)將數(shù)組與引用,枚舉和基元區(qū)別對(duì)待:
- 生成的toString()方法像對(duì)待其他實(shí)例屬性一樣對(duì)待實(shí)例的數(shù)組屬性:它依賴于數(shù)組的toString() ,這通常導(dǎo)致不希望的且通常無用的結(jié)果(數(shù)組的系統(tǒng)標(biāo)識(shí)哈希碼 )。
IntelliJ IDEA 14.0.2
對(duì)于這些示例,我正在使用IntelliJ IDEA 14.0.2 Community Edition 。
IntelliJ IDEA 14.0.2提供了配置項(xiàng)目結(jié)構(gòu)以期望JDK 8的“語言級(jí)別”的能力。
要在IntelliJ IDEA 14.0.2中生成代碼,可以使用Code | 生成選項(xiàng)(或擊鍵Alt + Insert(如NetBeans))。
IntelliJ IDEA 14.0.2提示操作員應(yīng)在生成的方法中包括哪些屬性。 它還詢問哪些字段非空,這意味著假定哪些字段永遠(yuǎn)不會(huì)為空。 在此處顯示的快照中,將對(duì)它們進(jìn)行檢查,這將導(dǎo)致方法在嘗試訪問它們之前不檢查這些屬性是否為null。 但是,在我用IntelliJ IDEA為本章生成的代碼中,我將沒有選中這些代碼,這意味著IntelliJ IDEA將在生成的方法中訪問它們之前檢查null。
IntelliJ IDEA 14.0.2的toString()生成為生成的toString()方法提供了冗長的格式(模板)列表。
IntelliJ IDEA 14.0.2還允許操作員選擇要包含在生成的toString()方法中的屬性(突出顯示的背景為藍(lán)色時(shí)選擇)。
類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 +'}'; }可以觀察到有關(guān)IntelliJ IDEA生成的常見方法:
- 大多數(shù)生成的代碼都是自動(dòng)的,并且具有少量可用的自定義功能,包括操作員選擇的方法中使用的字段,期望哪些字段為非空的規(guī)范(以便在生成的代碼中不需要空檢查)以及選擇的能力八種內(nèi)置toString()格式之一。
- 所有這些擴(kuò)展Object類中對(duì)應(yīng)項(xiàng)的通用方法都會(huì)自動(dòng)提供@Override注釋。
- 沒有Javadoc文檔包含生成的方法。
- 生成的方法不使用Objects類,因此需要對(duì)所有可能為null的引用進(jìn)行顯式檢查是否為null。
- 上面的示例中沒有顯示,但是IntelliJ IDEA 14.0.2在這三種常見方法的生成中確實(shí)以不同的方式對(duì)待數(shù)組:
- 生成的toString()方法在數(shù)組上使用Arrays.toString(Array) 。
Eclipse Luna 4.4.1
Eclipse Luna 4.4.1允許將“項(xiàng)目屬性”中的Java編譯器設(shè)置為JDK 8。
在Eclipse Luna中,開發(fā)人員使用“源”下拉菜單選擇要執(zhí)行的特定類型的源代碼生成。
Eclipse Luna允許操作員選擇要包含在常用方法中的屬性。 它還允許操作員指定所生成方法的一些特征。 例如,操作員可以選擇在生成的toString()方法中單獨(dú)打印數(shù)組的元素,而不是使用通常無意義的類名和系統(tǒng)標(biāo)識(shí)哈希碼。
類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 + "]"; }關(guān)于Eclipse生成的通用方法,可以觀察到以下幾點(diǎn):
- Eclipse在生成過程中提供了最多的點(diǎn),可以在其中配置所生成的輸出。 以下是一些可配置的選項(xiàng):
- 可以明確指定類中的位置(在類的現(xiàn)有方法之前或之后)。
- 所有這些擴(kuò)展Object類中對(duì)應(yīng)項(xiàng)的通用方法都會(huì)自動(dòng)提供@Override注釋。
- 生成的方法不使用Objects類,因此需要對(duì)所有可能為null的引用進(jìn)行顯式檢查是否為null。
- 當(dāng)生成本文中突出顯示的三種常用方法時(shí),Eclipse Luna 4.4.1確實(shí)會(huì)以不同的方式對(duì)待數(shù)組:
- 生成的toString()可以選擇使用Arrays.toString(Object[])或重載版本來訪問數(shù)組的內(nèi)容。
結(jié)論
這篇文章中介紹的所有三個(gè)IDE(NetBeans,IntelliJ IDEA和Eclipse)都會(huì)生成常見方法equals(Object) , hashCode()和toString()合理實(shí)現(xiàn),但是這些生成的方法在可定制性之間存在差異。三個(gè)IDE。 可用的不同定制和生成的不同實(shí)現(xiàn)可以為Java新手提供課程,以了解和考慮實(shí)現(xiàn)這些方法。 雖然這些IDE生成這些方法的能力最明顯和最顯著的優(yōu)點(diǎn)是與自動(dòng)生成相關(guān)的時(shí)間節(jié)省,但是這些方法的IDE生成的其他優(yōu)點(diǎn)包括能夠?qū)W習(xí)實(shí)現(xiàn)這些方法的能力以及成功實(shí)現(xiàn)的可能性更大。沒有錯(cuò)別字或其他錯(cuò)誤。
翻譯自: https://www.javacodegeeks.com/2014/12/three-common-methods-generated-in-three-java-ides.html
java常見的ide
總結(jié)
以上是生活随笔為你收集整理的java常见的ide_在三个Java IDE中生成的三种常见方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 义乌备案制教师转成编制难吗(义乌备案制)
- 下一篇: 帝国时代2详细攻略?