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

你一定需要知道的高階Java枚舉特性!

開發 開發工具
JAVA枚舉,比你想象中還要有用!我經常發現自己在Java中使用枚舉來表示某個對象的一組潛在值。

[[375855]]

JAVA枚舉,比你想象中還要有用!

我經常發現自己在Java中使用枚舉來表示某個對象的一組潛在值。

在編譯時確定類型可以具有什么值的能力是一種強大的能力,它為代碼提供了結構和意義。

當我第一次了解枚舉時,當時我認為它們只是一個為常量命名的工具,可以很容易地被靜態常量字符串ENUM_VAL_NAME所取代。

后來我發現我錯了。事實證明,Java枚舉具有相當高級的特性,可以使代碼干凈、不易出錯,功能強大。

讓我們一起來看看Java中的一些高級枚舉特性,以及如何利用這些特性使代碼更簡單、更可讀。

枚舉是類!

在Java中,枚舉是Object的一個子類。讓我們看看所有枚舉的基類,Enum(為簡潔起見進行了修改)。

  1. public abstract class Enum<E extends Enum<E>> 
  2.     implements Constable, Comparable<E>, Serializable { 
  3.   private final String name
  4.    
  5.   public final String name() { 
  6.       return name
  7.   } 
  8.    
  9.   private final int ordinal; 
  10.    
  11.   public final int ordinal() { 
  12.       return ordinal; 
  13.   } 
  14.    
  15.   protected Enum(String nameint ordinal) { 
  16.       this.name = name
  17.       this.ordinal = ordinal; 
  18.   } 
  19.    
  20.   public String toString() { 
  21.       return name
  22.   } 
  23.    
  24.   public final boolean equals(Object other) { 
  25.       return this==other; 
  26.   } 
  27.    
  28.   public final int hashCode() { 
  29.       return super.hashCode(); 
  30.   } 
  31.    
  32.   public final int compareTo(E o) { 
  33.       Enum<?> other = (Enum<?>)o; 
  34.       Enum<E> self = this; 
  35.       if (self.getClass() != other.getClass() && // optimization 
  36.           self.getDeclaringClass() != other.getDeclaringClass()) 
  37.           throw new ClassCastException(); 
  38.       return self.ordinal - other.ordinal; 
  39.   } 
  40.    

我們可以看到,這基本上只是一個常規的抽象類,有兩個字段,name和ordinal。

所以說枚舉都是類,所以它們具有常規類的許多特性。

我們能夠為枚舉提供實例方法、構造函數和字段。我們可以重寫toString(),但不能重寫hashCode()或equals(Object other)。

接下來我們看下我們的枚舉示例,Operation

  1. enum Operation { 
  2.   ADD
  3.   SUBTRACT, 
  4.   MULTIPLY 

這個枚舉表示一個Operation可以對兩個值執行,并將生成一個結果。關于如何實現此功能,您最初的想法可能是使用switch語句,如下所示:

  1. public int apply(Operation operation, int arg1, int arg2) { 
  2.    switch(operation) { 
  3.      case ADD
  4.        return arg1 + arg2; 
  5.      case SUBTRACT: 
  6.        return arg1 - arg2; 
  7.      case MULTIPLY: 
  8.        return arg1 * arg2; 
  9.      default
  10.        throw new UnsupportedOperationException(); 
  11.  } 
  12.  
  13.   

當然,這樣子會有一些問題。

第一個問題是,如果我們將一個新操作添加到我們的枚舉Operation中,編譯器不會通知我們這個開關不能正確處理新操作。

更糟糕的是,如果一個懶惰的開發人員在另一個類中復制或重新編寫這些代碼,我們可能無法更新它。

第二個問題是默認情況default,每段程序里面都是必需的,盡管我們知道在正確的代碼里它永遠不會發生。

這是因為Java編譯器知道上面的第一個問題,并且希望確保我們能夠處理在不知情的情況下向Operation中添加了新枚舉。

還好,Java8用函數式編程為我們提供了一個干凈的解決方案。

函數枚舉實現

因為枚舉是類,所以我們可以創建一個枚舉字段來保存執行操作的函數。

但是在我們找到解決方案之前,讓我們先來看看一些重構。

首先,讓我們把開關放在enum類中。

  1.    
  2. enum Operation { 
  3.   ADD
  4.   SUBTRACT, 
  5.   MULTIPLY; 
  6.    
  7.   public static int apply(Operation operation, int arg1, int arg2) { 
  8.     switch(operation) { 
  9.       case ADD
  10.         return arg1 + arg2; 
  11.       case SUBTRACT: 
  12.         return arg1 - arg2; 
  13.       case MULTIPLY: 
  14.         return arg1 * arg2; 
  15.       default
  16.         throw new UnsupportedOperationException(); 
  17.     } 
  18.   } 
  19.    

我們可以這樣做:Operation.apply(Operation.ADD, 2, 3);

因為我們現在從Operation中調用方法,所以我們可以將其更改為實例方法并使用this,而不是用Operation.apply()來實現,如下所示:

  1. public int apply(int arg1, int arg2) { 
  2.   switch(this) { 
  3.     case ADD
  4.       return arg1 + arg2; 
  5.     case SUBTRACT: 
  6.       return arg1 - arg2; 
  7.     case MULTIPLY: 
  8.       return arg1 * arg2; 
  9.     default
  10.       throw new UnsupportedOperationException(); 
  11.   } 
  12.    

像這樣使用:Operation.ADD.apply(2, 3);

看起來變好了。現在讓我們更進一步,通過使用函數式編程完全消除switch語句。

  1. enum Operation { 
  2.               ADD((x, y) -> x + y), 
  3.               SUBTRACT((x, y) -> x - y), 
  4.               MULTIPLY((x, y) -> x * y); 
  5.    
  6.               Operation(BiFunction<IntegerIntegerInteger> operation) { 
  7.                       this.operation = operation; 
  8.               } 
  9.    
  10.               private final BiFunction<IntegerIntegerInteger> operation; 
  11.    
  12.               public int apply(int x, int y) { 
  13.                       return operation.apply(x, y); 
  14.               } 
  15.    
  16.   } 
  17.    

這里我做的是:

  • 添加了一個字段 BiFunction
  • 用BiFunction創建了用于Operation的構造函數。
  • 調用枚舉定義中的構造函數,并用lambda指定BiFunction

這個java.util.function.BiFunction operation字段是對采用兩個參數的函數(方法)的引用。

在我們的例子中,兩個參數都是int型,返回值也是int型。不幸的是,Java參數化類型不支持原語,所以我們必須使用Integer。

因為BiFunction是用@functioninterface注釋的,所以我們可以使用Lambda表示法定義一個。

因為我們的函數接受兩個參數,所以我們可以使用(x,y)來指定它們。

然后我們定義了一個單行方法,它使用 ->x+y 返回一個值。這相當于下面的方法,只是更簡潔而已。

  1. class Adder implements BiFunction<IntegerIntegerInteger> { 
  2.         @Override 
  3.         public Integer apply(Integer x, Integer y) { 
  4.                 return x + y; 
  5.   } 

我們的新Operation實現采用相同的方式:Operation.ADD.apply(2, 3);.

但是,這種實現更好,因為編譯器會告訴我們何時添加了新Operation,這要求我們更新新函數。如果沒有這一點,如果我們在添加新Operation時還不記得更新switch語句,就有可能得到UnsupportedOperationException()。

關鍵要點

  • Enum枚舉是Enum的擴展類。
  • Enum枚舉可以有字段、構造函數和實例方法。
  • Enum枚舉字段可以存儲函數。與lambdas配合使用,可以創建干凈、安全的特定于枚舉的函數實現,并在編譯時強制執行它們(而不是使用switch)。

下面是這個示例的GitHub地址。(https://github.com/alex-power/java-enum-example)

本文參考:https://medium.com/javarevisited/advanced-java-enum-features-you-need-to-know-b516a191c7e2

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2018-08-23 16:25:29

HadoopHDFS存儲

2020-04-27 10:34:23

HTTPDNSDNS網絡協議

2024-03-21 17:29:45

2020-06-10 08:33:05

Java 編程語言開發

2023-02-10 08:44:05

KafkaLinkedIn模式

2020-01-03 10:11:01

數據庫安全SQL

2018-02-25 04:57:01

物聯網網絡技術v

2022-08-10 09:03:35

TypeScript前端

2011-09-20 10:56:35

云計算PaaS

2022-04-29 09:00:00

Platform架構內核線程

2018-09-10 09:26:33

2020-07-29 07:37:20

Git 修復項目

2022-07-06 10:07:21

物聯網IoT

2022-09-01 15:26:45

物聯網人工智能傳感器

2018-12-28 14:16:11

安全

2022-04-24 09:00:00

滲透測試安全數字時代

2022-12-30 11:24:21

2017-02-09 14:46:25

Git事情

2018-06-15 23:00:56

2017-09-18 18:31:08

Hadoop
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕无砖| av中文字幕在线| 3344国产永久在线观看视频| 高清不卡在线观看| 57pao精品| 超碰97在线资源站| 日韩a**中文字幕| 亚洲特级片在线| 亚洲一区免费网站| 国产成人精品一区二三区| 精品免费视频| 欧美xingq一区二区| 天堂资源在线亚洲视频| av在线资源观看| av资源久久| 日韩片之四级片| 999香蕉视频| 天天摸天天碰天天爽天天弄| 日本一不卡视频| 久久久久久久久国产| 黄色片在线观看免费| 4438全国亚洲精品观看视频| 欧美日韩日日骚| 国产女大学生av| 91精品国产91久久久久久青草| 久久久久久久久久美女| 国产91精品入口17c| 91久久久久国产一区二区| 欧美激情在线免费| 日韩欧美精品三级| 婷婷免费在线观看| 日本电影欧美片| 五月婷婷综合激情| 欧美日韩中文字幕在线播放| 伊人免费在线| 久久精品网站免费观看| 国内精品二区| 黄色小视频免费观看| 国产麻豆精品95视频| 热99在线视频| 久久久久久久久久久久久久av| 欧美一区久久| 久久久电影免费观看完整版| 久久久久久国产免费a片| 天堂日韩电影| 亚洲电影免费观看| 精品熟女一区二区三区| 亚洲国产中文在线| 91精品国产福利在线观看 | 香蕉视频污视频| 国产精品亚洲欧美日韩一区在线 | av天堂一区二区三区| 青青国产91久久久久久 | 亚洲精品v亚洲精品v日韩精品| 欧美男男青年gay1069videost| 欧美午夜性生活| 播放一区二区| 国产区在线观看成人精品| 狠狠色综合网站久久久久久久| 蜜臀av免费在线观看| 成人一区二区三区中文字幕| 国产成人成网站在线播放青青| 国产福利第一视频| 国产jizzjizz一区二区| 成人午夜电影免费在线观看| 蜜桃视频污在线观看| 99久久久无码国产精品| 国产精品欧美日韩久久| 中文字幕观看视频| 精品无人码麻豆乱码1区2区| 久久噜噜噜精品国产亚洲综合| 欧美黄片一区二区三区| 亚洲午夜精品久久久久久app| 欧美激情国产精品| 久草手机在线观看| 天使萌一区二区三区免费观看| 久久激情视频免费观看| 懂色av懂色av粉嫩av| 欧美在线1区| 午夜精品久久久99热福利| 二区视频在线观看| 久久精品久久99精品久久| 91av一区二区三区| 桃花色综合影院| 欧美激情一区二区三区四区| 日本在线视频www色| 51漫画成人app入口| 欧美性受xxxx| 免费看三级黄色片| 自拍欧美一区| 欧美成人r级一区二区三区| 国产一级黄色录像| 国产精品一线天粉嫩av| 日韩精品综合一本久道在线视频| 国产精品久久久久久亚洲av| 久久99视频| 久久精品久久久久久| 国产精彩视频在线观看| 日韩不卡一区二区| 99免费在线视频观看| 日本中文字幕电影在线观看| 国产成人亚洲综合a∨婷婷| 精品一区在线播放| 高h视频在线观看| 日韩欧美大尺度| www.色.com| 精品视频免费在线观看| 久久久久久成人精品| 在线观看毛片视频| 日韩**一区毛片| 51国偷自产一区二区三区| 日本不卡免费播放| 亚洲激情网站免费观看| 日本三区在线观看| 国产精品tv| 久久亚洲精品网站| www.国产毛片| 日韩和欧美的一区| 成人国产一区二区| 日韩在线观看www| 黑丝美女久久久| 女人扒开腿免费视频app| 国产精品久久久久久久久久齐齐| 精品国产免费人成电影在线观看四季| 91视频免费在观看| 午夜亚洲视频| 精品一区二区三区日本| 免费污视频在线| 3d动漫精品啪啪1区2区免费| 香蕉视频999| 国产麻豆精品| 一区二区日韩精品| 精品国产午夜福利| 成人aaaa免费全部观看| 日本久久久网站| 天堂久久av| 欧美精品亚州精品| 国产偷拍一区二区| 中文字幕一区三区| 少妇一级淫免费播放| 波多野结衣在线观看一区二区三区| 7777免费精品视频| 无码精品在线观看| 2023国产精品视频| 国产妇女馒头高清泬20p多| 一区二区视频| 欧美韩日一区二区| 可以免费观看的毛片| 亚洲资源中文字幕| 亚洲欧美日韩色| 国产日韩精品视频一区二区三区 | 亚洲伦理在线观看| 亚洲黄色av一区| 亚洲成人福利视频| 亚洲韩日在线| 久久国产精品久久| 1pondo在线播放免费| 在线视频观看一区| 欧美aaa级片| 国产一区美女在线| 99久久免费观看| 欧美性生活一级片| 色老头一区二区三区| 日本妇乱大交xxxxx| 国产欧美日韩亚州综合| 亚洲免费999| 午夜日本精品| 精品无人乱码一区二区三区的优势| 超碰超碰人人人人精品| 69堂成人精品免费视频| 日韩一级片大全| 丰满白嫩尤物一区二区| 亚洲不卡中文字幕无码| 久操成人av| 国产日韩欧美中文| 丝袜综合欧美| 日韩国产精品视频| 亚洲视频在线免费播放| 尤物av一区二区| 美国黄色a级片| 免费成人你懂的| www.欧美黄色| 综合亚洲自拍| 成人综合网网址| 一个人看的www视频在线免费观看| 亚洲乱码一区二区| 国产精品久久久久久久久毛片| 一区二区三区在线观看国产| 国产精品无码一区二区三| 男男成人高潮片免费网站| 最新av网址在线观看| 亚洲伊人春色| 亚洲综合在线中文字幕| 51漫画成人app入口| 综合网中文字幕| 日本高清视频免费观看| 欧美日本国产视频| 99久在线精品99re8热| √…a在线天堂一区| 免费成人蒂法网站| 国产一区日韩二区欧美三区| 日韩激情免费视频| 国产精品欧美大片| 国产欧美一区二区| 亚洲美女久久精品| 久久999免费视频| 国产精品四虎| 日韩av在线天堂网| 精品国产九九九| 欧美午夜精品一区二区蜜桃| 五月天综合在线| 亚洲欧美乱综合| 天天躁日日躁aaaa视频| av电影天堂一区二区在线 | 黄色一级片免费在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 久久精品人人| 欧美黑人3p| 久久久91麻豆精品国产一区| 国产精品第2页| 伊人久久国产| 国语自产精品视频在免费| www在线视频| 俺去亚洲欧洲欧美日韩| 久草在线青青草| 日韩国产高清污视频在线观看| 亚洲精品视频网| 91精品国产一区二区| 艳妇乳肉豪妇荡乳av| 在线精品视频小说1| 天堂在线免费观看视频| 欧美日韩国产在线看| 五月天婷婷丁香| 亚洲午夜久久久| 久久亚洲AV无码| av高清不卡在线| 亚洲熟妇一区二区| 国产精品综合二区| 在线观看日本www| 精品制服美女丁香| 色天使在线观看| 乱一区二区av| 中文字幕资源在线观看| 久久99日本精品| 亚洲涩涩在线观看| 寂寞少妇一区二区三区| 欧美又黄又嫩大片a级| 精品一区二区免费看| 涩涩网站在线看| 国产在线观看免费一区| 日本特黄在线观看| 懂色av一区二区夜夜嗨| 国产日韩视频一区| 播五月开心婷婷综合| 日韩 中文字幕| 久久久久久久久免费| 秋霞网一区二区三区| 国产精品三级久久久久三级| 潘金莲一级黄色片| av一二三不卡影片| www.日本高清| 久久久久久久久久久久久夜| 无码人妻aⅴ一区二区三区69岛| 国产日韩av一区二区| 日韩欧美视频免费观看| 福利一区福利二区| 国产精品麻豆入口| 久久久www免费人成精品| www久久久久久久| 亚洲视频一区在线观看| 久久黄色免费视频| 中文字幕成人在线观看| 成年人视频软件| 洋洋成人永久网站入口| 国产成人在线免费视频| 欧美三级中文字幕在线观看| 国产情侣一区二区| 日韩电影大全免费观看2023年上 | 国产日韩综合av| 中国特黄一级片| 亚洲一区二区三区小说| 丰满少妇xoxoxo视频| 91.com在线观看| 色婷婷中文字幕| 最近的2019中文字幕免费一页 | 在线观看一区二区三区视频| 99久久综合99久久综合网站| 天堂资源在线视频| 亚洲午夜一区二区三区| 欧美三级网站在线观看| 日韩女同互慰一区二区| 黄色小视频在线免费观看| 欧美裸身视频免费观看| 免费福利视频一区二区三区| 91在线视频导航| 免费精品国产| avav在线播放| 免费成人在线影院| 久久午夜夜伦鲁鲁片| 亚洲特级片在线| 销魂美女一区二区| 精品成人私密视频| 免费在线观看av| 国产va免费精品高清在线观看| 午夜视频一区二区在线观看| 亚洲视频导航| 久久久久久网| 欧美一区二区免费在线观看| 中文字幕日韩一区| 特级西西444www大胆免费看| 亚洲电影免费观看高清| caoporn97在线视频| 国产精品毛片a∨一区二区三区|国| 国内自拍欧美| 4444在线观看| 久久99精品国产91久久来源| 97超碰在线免费观看| 亚洲国产成人av好男人在线观看| 麻豆91精品91久久久| 欧美亚洲综合一区| 日本1级在线| 韩国国内大量揄拍精品视频| 久久综合偷偷噜噜噜色| 一区二区三区观看| 爽爽淫人综合网网站 | 国产精品少妇自拍| 免费的毛片视频| 日韩电影网在线| 2021天堂中文幕一二区在线观| 高清国语自产拍免费一区二区三区| 亚洲精品二区三区| av日韩在线看| 国产自产v一区二区三区c| 黄大色黄女片18免费| 在线亚洲免费视频| 九一在线视频| 青青a在线精品免费观看| 亚洲激情播播| 午夜精品久久久99热福利| 久久精品97| 亚洲狠狠婷婷综合久久久| 日韩精品一二三区| av网站免费在线看| 日韩欧美福利视频| 黄色片在线免费观看| 国产aⅴ夜夜欢一区二区三区 | aaa在线视频| 亚洲精品综合精品自拍| 天堂网在线最新版www中文网| 黑人巨大精品欧美一区二区小视频| 激情久久一区| 黄色国产在线观看| 色老汉一区二区三区| 高清av在线| 国产欧亚日韩视频| 午夜精品国产| 大尺度做爰床戏呻吟舒畅| 欧美日韩国产中字| 国产专区在线播放| 国产欧美在线播放| 韩日欧美一区| 中文在线一区二区三区| 色偷偷成人一区二区三区91| 成人网视频在线观看| 91久久久国产精品| 国产精品啊啊啊| 公侵犯人妻一区二区三区| 欧美色综合网站| 中文字幕伦理免费在线视频| 国产精品一区二区三区四区五区| 亚洲永久视频| 国产精品久久国产精麻豆96堂| 91麻豆精品国产91久久久使用方法| 黄色免费网站在线观看| 国产日韩欧美综合精品| 日本网站在线观看一区二区三区| 亚洲怡红院在线观看| 欧美精品一区视频| 国产一区二区精品调教| 欧美一级黄色录像片| 91网站视频在线观看| 亚洲一区二区三区高清视频| 欧美日韩福利电影| 国产精品一线天粉嫩av| 中文字幕55页| 色菇凉天天综合网| 91cn在线观看| 日本免费高清一区二区| 欧美不卡视频| 中文人妻一区二区三区| 91精品国产综合久久国产大片 | 中出一区二区| 日本丰满少妇裸体自慰| 56国语精品自产拍在线观看| 激情aⅴ欧美一区二区欲海潮| 亚洲欧美电影在线观看| fc2成人免费人成在线观看播放| 中文字幕人妻色偷偷久久| 国模叶桐国产精品一区| 99精品国产一区二区三区|