精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談如何為Java創建Pair類

開發 后端
Java中對于多個返回參數的選項是有限制的。一種方法只能返回一個對象,數組或原始函數,和其他語言不同的是它不會提供一種簡易方式來消耗方法調用中的參數。

Java中對于多個返回參數的選項是有限制的。一種方法只能返回一個對象,數組或原始函數,和其他語言不同的是它不會提供一種簡易方式來消耗方法調用中的參數。實際上我們的選擇是返回一個對象數組,一個集合,僅為返回的參數創建一個類,或者最終將其發送到你打算替換的對象中。所有這些方法都存在缺陷:
使用對象數組

如果我們能夠幸運地獲取一套同類的返回參數,那么對象的數組就會是一個帶有例外的選項,當我們打開這些對象時需要能分辨出每個參數。從另一方面來說,如果我們正在返回多個參數的不同類型,我們需要使用所有超類對象的數組--最有可能的就是對象本身。然后我們要拋出每一個打開的參數。我們已經丟失了類型安全性且返回參數命令出錯的機會也可能增加。

使用集合

與使用數組的方法類似,我們或許也能創造一個集合來實現返回。在集合之上使用數組主要是因為創建集合所需要代碼的數量要比這段代碼短:

List< Object> retVal = new ArrayList< Object>(); 
retVal.add(string1);

retVal.add(num2);

retVal.add(object3);

return retVal; 
而創建集合的代碼要高于使用數組初始化設置:

return new Object[] {string1, num2, object3}

事實上在數組之上使用集合沒有什么真正的優勢,除非我們要使用映射以便通過名稱或其他要素來返回值。

首次創建Java時,其簡單程度是對日趨復雜的c++的一種顛覆。指針和內存管理被簡化了,包括去除參數間接,常量,函數指針以及其他功能強大但容易混淆的性能。在c++中,我們可以用值或參照傳遞參數,這樣可以對方法中的參照進行重新分配,并為你提供參數或返回更多值的方式。

使用JavaBeans

C++也支持的structs允許簡單結構化的數據包。當然,Java類可以簡單完成雙倍于structs的任務,但通常習慣以大量模板來擴大源碼。

使用類和JavaBeans慣例的時候還存在一個問題,即對象本質上是易變的。這些對象有可能被方法的調用者和方法調用的類共享,這樣就會導致易變狀態的共享,而這中情況無益于多線程系統。

在Java中,你能用值傳遞的只剩下方法參數了,而且還不能是outparams,同時方法只能返回一個參數。看一下任意代碼庫就會發現大量的實例,不過卻不是十分有效。

改進Java Beans方式

那么應該怎樣做呢?Java類選項事實上才是解決方案的關鍵以及對其方式進行改進。這些類可以成為structs更好的替代物。

讓我們為返回的類確定兩個參數:名稱和出生日期:

public class PersonNameDOB { 
private String name;

private Date dob;

public Date getDob() {

return dob;

}

public void setDob(Date dob) {

this.dob = dob;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}}

然這是一個人為的例子,我們有機會擁有一個已經定義的Person類。大家肯定也會有類似的例子,需要從方法中返回兩個不同的對象,但是卻沒有已經為其定義的類,或者是返回的類夾帶多余的信息,或許是比這更糟的情況。例如,如果有人調用了你的方法來使用或修改返回對象中的值。
上述情況所需代碼更多。因此我們可以做一些簡單的修改:

public class PersonNameDOB { 
public final String name;

public final Date dob;

public PersonNameDOB(String name, Date dob) {

this.name = name;

this.dob = dob;

}}


其結果要短一些且更適合這項任務。值已經返回了,因此不需要setters了,我們只要在返回對象建成后創建值就可以了。它們不需要更改,由于它們位于構造器中,因此具有決定性作用。現在任務已經完成,將類的屬性設為公開也沒有風險了。同理,可以處理getters了,其結果更短,更易于使用。

PersonNameDOB personNameDOB = SSNLookup.lookupBySSN("123-45-6789"); 
System.out.println(personNameDOB.name);

System.out.println(personNameDOB.dob);

lookupBySSN方法:

public PersonNameDOB lookupBySSN(String ssn) {

... Find the person record in the DB, etc. ...

return new PersonNameDOB(person.getName(), person.getDOB());}

 
如果這些太顯而易見,請耐心看下去。我喜歡用這個方法來簡化對象的返回。這種類型是安全的,因此在返回后不需要將對象拋出數組。而最后屬性的修改意味著這些返回的對象不會被濫用--它們只是為了傳輸數據。

為了安全起見,建議你復制對象或使用不可改變的對象以應付值的意外修改。在我們的例子中,字符串是不可改變的,但是日期可以復制:

 public PersonNameDOB lookupBySSN(String ssn) { 
... Find the person record in the DB, etc. ...

return new PersonNameDOB(person.getName(), new Date(person.getDOB().getTime()));

}


這可以阻止調用者做接下來的操作:

 PersonNameDOB personNameDOB = SSNLookup.lookupBySSN("123-45-6789"); 
personNameDOB.dob.setTime(0);

成對的需求

以上的模式是筆者經常在Java應用程序接口調用中用來替代structs的方法,但是如果我們只是想返回兩個類型對象,這些就還不夠。看上去是唾手可得的東西其實仍然從JavaSE標準分配中神秘失蹤,而這就是被原始化的Pair類。看看我們如何從上述模式來建立Pair類。

首先,值要比名稱和出生日期都普遍。最普遍的是在將域名定為first和second:

public class Pair { 
public final String first;

public final Date second;

public Pair(String first, Date second) {

this.first = first;

this.second = second;

}}

現在擁有了一個可以返回Strings和Dates對的通用類,但還不包括其他類型,將其擴展為通用類型:

public class Pair< A, B> { 
public final A first;

public final B second;

public Pair(A first, B second) {

this.first = first;

this.second = second;

}}

這樣就好多了。沒必要擔心代表了一對返回類型快捷方式的通配符。這個類現在可以作為通用類型對來使用,如:

public static Pair< String, Date> lookupBySSN(String ssn) { 
// find the person in the DB....

return new Pair(person.getName(), new Date(person.getDOB().getTime()));

}


開始使用:

Pair< String, Date> personNameDOB = SSNLookup.lookupBySSN("123-45-6789"); 
System.out.println(personNameDOB.first);

System.out.println(personNameDOB.second);

Pair類還未完成。我們還要考慮類型是否真具有普遍性:

1. 我們不想其他人擴展或更改Pair類,因為這可能破壞類的最初意圖。

2. 新的new Pair()是可以的,但是看上去有些不雅,我們可以改進一下。

3. Pair對于返回值是很有效的,但是如果要作為映射中的關鍵要素就有些勉為其難。

4. 擁有用于調試或其他toString()用途的Pair字符串代表形式是非常好的。

5. 最后,允許Pair和包含的對象可被序列化,其內容也被假定為可以序列化了。

因此,讓我們看看它是如何改變Pair執行的:

public final class Pair< A,B> implements Serializable { 
private static final long serialVersionUID = 1L; // shouldn't

// need to change

public final A first;

public final B second;

private Pair (A first, B second) {

this.first = first;

this.second = second;

}

public static < A,B> Pair< A,B> of (A first, B second) {

return new Pair< A,B>(first,second);

}

@Override

public boolean equals(Object obj) {

if (obj == null) {

return false;

}

if (getClass() != obj.getClass()) {

return false;

}

final Pair other = (Pair) obj;

if (this.first != other.first &&

(this.first == null || !this.first.equals(other.first))) {

return false;

}

if (this.second != other.second &&

(this.second == null || !this.second.equals(other.second))) {

return false;

}

return true;

}

@Override

public int hashCode() {

int hash = 7;

hash = 37 * hash + (this.first != null ?

this.first.hashCode() : 0);

hash = 37 * hash + (this.second != null ? this.second.hashCode() : 0);

return hash;

}

@Override

public String toString () {

return String.format("Pair[%s,%s]", first,second);

}

}
 

這樣就已經將構造器私有化,但是提供了一個看起來更適合的靜態of()方法:

return Pair.of(person.getName(), new Date(person.getDOB().getTime()));

Pair類已經完成,因此沒有人可以取代它或改變類的原始意圖。它看上去很嚴格,但卻可以用于廣泛的使用。如果有人想讓Pair以不同方式運作,就應該寫出適合自己的執行代碼,并對其進行求證。

equals()和hash()方法意味著這個類不止可以用來返回值。它們還可以成為映射的關鍵。此處對使用該模式返回對象給出的建議是讓IDE為我們創建equals和hashCode方法。IDE往往都有可插入的模板,其中包含已定義的最佳方法,因此我們只需讓NetBeans創建就可以了。

toString()給出了pair的合適形式,如 "Pair[FredJones,Sun Mar 22 12:55:44 PDT 2009]"。這對于調試彈出很有用。

這一個類現在執行Serializable。相信此處我們的選擇令人懷疑,但是集合是可序列化的,Pair應該也可以。如果Pair中的類不能序列化那么就如果集合中的類不能序列化一樣糟糕,而Pair不應該阻止類中間的序列化。

完成了嗎?

既是又不是。這個類現在在Navigenics中使用。毫無疑問在其他Java應用程序中也存在類似的執行。那我們完成了沒有呢?從"最具預見性"的角度來講,我們完成了。從"任何時候都需要"的角度來說恐怕還沒完成。

例如,這類Pairs不能做比較。增加一個compareTo()方法使之可比,但是要注意應對復雜的通用類設計。通常,比較第一個值很容易,如果它們相等,就要比較第二個值。這可能是最合適的行為,但是Pair的每次使用都正確嗎?我們要檢查一下作比較的類是否具有可比性,如果不具備,該怎么辦?

結論

為Java創建一個Pair類是有些難的,而且在簡單通用的類庫執行中,類庫要求在少量功能前提下不改變Java語言。通用性是很麻煩的一件事。不過,本人相信本文描述的Pair類至少是SE庫中標準化Pair執行的良好開端。但愿在Java 7中會增加這一項。盡管它對于其他語言中的Tuple來說是顯得有些貧乏,但是加入標準的Pair有望為我們帶來大量實用性。這種可讀性的改進以及模板代碼的刪除都旨在減少Coin項目的語言變化。

【編輯推薦】

  1. 走進Java 7中的模塊系統
  2. 淺談Java中的編碼理論
  3. Java語言中抽象類和接口的區別
責任編輯:彭凡 來源: IT專家網
相關推薦

2009-06-17 14:09:23

配置java home

2018-06-20 15:50:07

WindowsWindows 10USB

2011-09-19 16:15:28

恢復證書Vista

2021-11-16 07:26:05

開源項目規范

2020-03-06 09:58:54

IT融資技術

2019-10-12 10:11:02

數據集聚類算法

2012-11-15 09:38:46

2009-08-18 14:04:33

C#安裝類

2011-03-23 10:40:51

java代理模式

2009-06-08 17:59:00

HibernateTemplate

2009-06-18 12:37:26

java編程語言

2022-08-09 11:51:49

數據存儲智慧城市

2009-08-24 17:24:28

C#創建XML文檔

2014-08-07 09:24:08

Process

2017-11-13 12:53:14

時間序列數據數據k-均值

2009-06-22 14:06:00

java瀏覽器

2021-10-29 15:40:33

SASE

2023-05-15 20:11:34

2022-07-29 15:08:05

加密貨幣去中心化工具

2009-10-20 09:39:04

VB.NET Butt
點贊
收藏

51CTO技術棧公眾號

热久久免费视频| 欧美精品色图| 精品成人在线视频| 欧美一区二区在线视频观看| 免费在线不卡av| 亚洲澳门在线| 日韩精品一二三四区| 99视频精品免费| 午夜伦理大片视频在线观看| 91丨porny丨国产入口| 国产成人精品综合| 91插插插插插插| 亚洲电影男人天堂| 欧美一级午夜免费电影| 欧美日韩亚洲一| 香蕉视频网站在线观看| 丰满亚洲少妇av| 国产精品精品一区二区三区午夜版 | 久久久久久久久久久久| 欧美男女视频| 色偷偷一区二区三区| 日本高清视频免费在线观看| 国产高清自拍视频在线观看| 国产成人av电影| 国产免费亚洲高清| 97久久久久久久| 欧美成人有码| 日韩视频一区在线| 日韩精品电影一区二区| 黄色免费大全亚洲| 日韩亚洲欧美中文三级| 99热手机在线| 亚洲校园激情春色| 亚州成人在线电影| 狠狠噜天天噜日日噜| 黄色网址在线免费观看| 日本一区二区视频在线观看| 久久久免费看| 污污网站免费在线观看| 成人黄色一级视频| 99在线热播| 国产伦一区二区| 麻豆极品一区二区三区| 国产成人综合精品在线| 国产日产精品一区二区三区| 一本久道久久综合婷婷鲸鱼| 久久久久久久久久av| a级片在线观看免费| 亚洲国产老妈| 久久高清视频免费| 希岛爱理中文字幕| 影视一区二区| 欧美成人激情在线| 天天看片中文字幕| 欧美三区美女| 欧美精品九九久久| 国产主播在线播放| 亚洲麻豆视频| 欧洲亚洲免费在线| 中文字幕免费观看| 日本一区中文字幕 | 精品久久久无码人妻字幂| 激情视频在线观看| 亚洲欧美另类小说视频| 日本xxx免费| 婷婷丁香在线| 亚洲成人资源在线| 男女av免费观看| 全球最大av网站久久| 欧美日韩一区三区四区| 超碰在线资源站| 亚洲网址在线观看| 日韩av一区在线观看| 美女被到爽高潮视频| 欧美国产一级| 欧美极品少妇xxxxⅹ裸体艺术| 久久精品性爱视频| 老司机精品福利视频| 国产美女久久久| 亚洲成人一级片| 99久久久精品| 亚洲高清精品中出| 在线āv视频| 黑丝美女久久久| 色乱码一区二区三区在线| 亚洲美女色播| 亚洲国产小视频在线观看| 在线观看日本中文字幕| 亚州av乱码久久精品蜜桃| 69国产精品成人在线播放| 亚洲av无码乱码国产精品fc2| 精品在线亚洲视频| 国产日韩精品一区观看| av免费在线一区二区三区| 亚洲精品菠萝久久久久久久| 久久久久狠狠高潮亚洲精品| 视频欧美精品| 日韩国产中文字幕| 免费看特级毛片| 国产精品日本| 99九九电视剧免费观看| 激情在线视频| 亚洲午夜久久久久久久久电影院 | 天堂资源在线播放| 麻豆精品一区二区综合av| 国产精品永久入口久久久| 成人激情电影在线看| 亚洲一区二区三区在线| 浓精h攵女乱爱av| 四虎国产精品免费久久| 亚洲缚视频在线观看| 91动漫免费网站| 一区二区日本视频| 国产日韩在线视频| 桃花色综合影院| 亚洲欧美一区二区三区国产精品| 国产精品无码专区av在线播放| 久久国际精品| 中文字幕不卡在线视频极品| 日韩污视频在线观看| 国产乱人伦精品一区二区在线观看| 蜜桃导航-精品导航| 日韩特级毛片| 欧美挠脚心视频网站| 成人免费毛片糖心| 在线精品一区二区| 亚洲综合第一页| 欧美天天影院| 欧美亚洲高清一区二区三区不卡| 国产又粗又长又爽| 在线高清一区| 国产精品国产三级国产专区53| 免费人成在线观看播放视频| 欧美亚洲一区二区在线观看| 亚洲AV无码国产成人久久| 亚洲国产精品第一区二区三区| 亚洲自拍小视频| 精产国品自在线www| 欧美伦理视频网站| 超碰人人干人人| 日本欧美一区二区在线观看| 日本精品一区二区三区视频 | 丰满熟妇乱又伦| 亚洲欧美日韩中文播放 | 成人白浆超碰人人人人| www.69av| 成人午夜大片| 91国产精品91| 秋霞av在线| 欧美性猛交xxxx免费看漫画 | 欧美日韩一区二区在线免费观看| 牛牛精品成人免费视频| 4438全国成人免费| 青草久久伊人| 欧美天堂亚洲电影院在线播放| 免费看91的网站| 秋霞成人午夜伦在线观看| 亚洲春色在线视频| 亚洲最大的免费视频网站| 久久av在线播放| 成人av无码一区二区三区| 一区二区视频在线| 中文在线观看免费视频| 香蕉久久国产| 一级日韩一区在线观看| 欧美国产亚洲精品| 午夜精品一区二区三区在线视 | 色综合影院在线| 国产熟女精品视频| 一区二区三区不卡视频在线观看| 中文字幕第九页| 一区福利视频| 欧美极品一区二区| 99久久婷婷国产综合精品首页| 日韩在线视频国产| 国产99视频在线| 亚洲成人免费在线| 亚洲女优在线观看| 国产九九视频一区二区三区| 东北少妇不带套对白| 美女毛片一区二区三区四区最新中文字幕亚洲 | 精品国产乱码久久久久久久软件| 无遮挡爽大片在线观看视频| 在线播放国产一区中文字幕剧情欧美| 国产三级午夜理伦三级| 午夜成人免费视频| 成熟人妻av无码专区| 国产精品一二三四五| 欧美日韩在线视频一区二区三区| 日韩欧美不卡| 国产精品免费区二区三区观看| 亚洲最大网站| 久久6免费高清热精品| 日本电影一区二区在线观看| 欧美日韩mp4| 天堂中文在线网| 亚洲女厕所小便bbb| 亚洲精品视频大全| 国产在线视频一区二区三区| 无码播放一区二区三区| 亚洲欧美偷拍自拍| 欧美午夜欧美| 成人免费在线电影网| 国产精品亚洲精品| 中文在线8资源库| 久久国产精品偷| 韩国福利在线| 亚洲成人免费网站| aaaa一级片| 91久久精品国产91性色tv| 久久久全国免费视频| 国产无一区二区| 日韩www视频| 国产一区二区三区国产| 欧美 日韩 国产 激情| 亚洲麻豆一区| a级免费在线观看| 久久精品播放| 奇米888一区二区三区| 91精品国产自产精品男人的天堂| 国产精品午夜国产小视频| 成人美女黄网站| 国产综合在线视频| 日本h片在线观看| 久久久电影免费观看完整版| 国产九色在线| 亚洲热线99精品视频| 欧美少妇bbw| 日韩午夜电影av| 6—12呦国产精品| 欧美艳星brazzers| 国产熟妇一区二区三区四区| 欧美日韩精品二区| 国产无码精品一区二区| 亚洲精品久久嫩草网站秘色| 黄色香蕉视频在线观看| 国产精品盗摄一区二区三区| 懂色av蜜桃av| 中文字幕欧美国产| 一级肉体全黄裸片| 国产午夜精品久久| 精品成人无码一区二区三区| 久久久亚洲精品石原莉奈| 熟妇高潮精品一区二区三区| 不卡免费追剧大全电视剧网站| 少妇精品无码一区二区| 国产福利不卡视频| 手机在线免费毛片| 国产在线精品不卡| 亚洲熟女乱综合一区二区| 国产很黄免费观看久久| 一二三区视频在线观看| 成人精品视频一区二区三区尤物| 国产综合内射日韩久| 99久久婷婷国产| 熟女少妇一区二区三区| 国产日韩欧美在线一区| 91n在线视频| 亚洲精品欧美激情| 国产精品2020| 色噜噜狠狠一区二区三区果冻| 日韩综合在线观看| 欧美丰满少妇xxxxx高潮对白| 一级特黄aa大片| 日韩一区二区在线免费观看| 亚洲国产精彩视频| 亚洲国产一区二区三区四区| 毛片在线免费| 久久久成人精品视频| 999精品网| 日韩美女在线观看一区| 日韩黄色三级| 国产视频99| 国产精品密蕾丝视频下载| 亚洲天堂电影网| 欧美日韩一区二区国产| 国产91美女视频| 另类成人小视频在线| 中文字幕一区二区三区人妻在线视频 | 成人动漫网站在线观看| 国产成人一二| 欧美性xxxx69| 欧美aa国产视频| 波多野结衣50连登视频| 精品一区二区三区在线视频| 亚洲av无码一区东京热久久| 久久久亚洲午夜电影| 日本午夜在线观看| 欧美日韩中文字幕| 国产老女人乱淫免费| 亚洲国产小视频在线观看| av在线电影院| 性视频1819p久久| 国产精品伦一区二区| 国产二区不卡| 97精品国产福利一区二区三区| 男人天堂av片| 久久97超碰国产精品超碰| 国产黑丝在线观看| 国产精品超碰97尤物18| 男人的天堂一区二区| 69精品人人人人| 欧美69xxxxx| 欧美激情国产日韩精品一区18| 国产成人精品一区二三区在线观看 | 中文乱码免费一区二区| 国产系列精品av| 91精品免费观看| 极品美乳网红视频免费在线观看| 久久久噜久噜久久综合| 亚洲精品成人一区| 日韩av一区二区三区在线观看| 国产精品黄色| 亚洲天堂一区二区在线观看| 欧美国产综合色视频| 国产又粗又爽视频| 欧美成va人片在线观看| 免费在线午夜视频| 国产精品美女久久久免费| 美日韩中文字幕| 欧美变态另类刺激| www.亚洲人| 国产一级片免费看| 日韩一区二区在线免费观看| 欧美性猛交xxx乱大交3蜜桃| 国产精品露脸自拍| 国产一区二区精品久| 无码aⅴ精品一区二区三区浪潮| 成人一区二区三区视频| 黑人巨大精品一区二区在线| 欧美午夜电影一区| 成人精品一区二区三区免费 | 中文字幕一区二区三区精品| 日韩欧美黄色影院| 主播国产精品| 亚洲free嫩bbb| 91精品久久久久久久蜜月| 亚洲综合欧美在线| 中文字幕在线不卡| 亚洲熟妇无码久久精品| 色婷婷av一区二区三区久久| 福利视频一区| 亚洲三级一区| 国产呦萝稀缺另类资源| 日本黄色免费片| 欧美一级搡bbbb搡bbbb| 最爽无遮挡行房视频在线| av色综合网| 亚洲无线视频| 星空大象在线观看免费播放| 五月婷婷综合网| 日本不卡免费播放| 国产精品久久久久免费a∨| 不卡在线一区| 日本黄色福利视频| 亚洲人成网站色在线观看| 国产黄色高清视频| 欧美日韩国产91| 日韩精品福利一区二区三区| 亚洲中文字幕无码中文字| 欧美激情在线看| 6—12呦国产精品| 欧美精品福利在线| 亚洲资源网你懂的| 邪恶网站在线观看| 亚洲欧美aⅴ...| 亚洲欧美综合在线观看| 国产精品国产福利国产秒拍| 99国产精品免费视频观看| 性鲍视频在线观看| 精品久久久久久电影| 成人高潮成人免费观看| 亚洲va欧美va国产综合剧情| 尤物在线精品| 337人体粉嫩噜噜噜| 欧美一卡2卡3卡4卡| 在线观看福利电影| 亚洲一卡二卡三卡| 成a人片亚洲日本久久| 国产免费av一区| 久久精品夜夜夜夜夜久久| 成人在线超碰| 另类小说第一页| 艳妇臀荡乳欲伦亚洲一区| 国内精品在线视频| 91文字幕巨乱亚洲香蕉| 香蕉久久夜色精品国产| 日韩一级片大全| 亚洲精品视频在线播放| 青青伊人久久| 国产91对白刺激露脸在线观看| 国产精品久久久久久户外露出| 人妻丰满熟妇av无码区hd| 国产精品露脸av在线| 影音先锋中文字幕一区| 中文乱码字幕高清一区二区| 亚洲激情在线观看| 欧美在线se| 久久精品99国产| 亚洲午夜精品一区二区三区他趣|