Java 利用枚舉實(shí)現(xiàn)接口進(jìn)行統(tǒng)一管理
枚舉公共接口
public interface IPairs<K, V, C extends Enum> { /** * 返回枚舉對(duì)象 * */ C get(); /** * 返回枚舉項(xiàng)的 key * */ K key(); /** * 返回枚舉項(xiàng)的 value * */ V value(); }
狀態(tài)枚舉類(lèi)
public enum StatusEnum implements IPairs<Integer, String, StatusEnum> { DISABLED(0, "record has been disabled"), ENABLED(1, "record has been enabled"), DELETES(9, "record has been deleted") ; private int code; private String desc; StatusEnum(int code, String desc) { this.code = code; this.desc = desc; } public StatusEnum get() { return this; } @Override public Integer key() { return this.code; } @Override public String value() { return this.desc; } }
響應(yīng)枚舉類(lèi)
public enum ResponseEnum implements IPairs<Integer, String, ResponseEnum> { SUCCESS(10000, "success"), FAILED(10001, "failed") ; private int code; private String desc; ResponseEnum(int code, String desc) { this.code = code; this.desc = desc; } public ResponseEnum get() { return this; } @Override public Integer key() { return this.code; } @Override public String value() { return this.desc; } }
代碼驗(yàn)證
public class AnswerApp { public static void main(String[] args) { invoke(StatusEnum.ENABLED); System.out.println(); response(ResponseEnum.SUCCESS); } private static void response(IPairs pairs) { System.out.println(pairs.get() == ResponseEnum.SUCCESS); System.out.println(MessageFormat.format("key: {0}, value: {1}", pairs.key(), pairs.value())); } private static void invoke(IPairs pairs) { System.out.println(pairs.get() == StatusEnum.ENABLED); System.out.println(MessageFormat.format("key: {0}, value: {1}", pairs.key(), pairs.value())); } }
程序運(yùn)行結(jié)果
true key: 1, value: record has been enabled true key: 10,000, value: success
結(jié)論:
項(xiàng)目中使用同一接口管理枚舉類(lèi), 在方法參數(shù)中使用接口而不是用具體的枚舉對(duì)象作為入?yún)ⅲ?可以一定程度上降低程序的耦合性
補(bǔ)充:java中enum類(lèi)的兩種接口的實(shí)現(xiàn)方法
和普通 Java 類(lèi)一樣,枚舉類(lèi)可以實(shí)現(xiàn)一個(gè)或多個(gè)接口
若每個(gè)枚舉值在調(diào)用實(shí)現(xiàn)的接口方法呈現(xiàn)相同的行為方式,則只 要統(tǒng)一實(shí)現(xiàn)該方法即可。
若需要每個(gè)枚舉值在調(diào)用實(shí)現(xiàn)的接口方法呈現(xiàn)出不同的行為方式, 則可以讓每個(gè)枚舉值分別來(lái)實(shí)現(xiàn)該方法
1、enum關(guān)鍵字定義枚舉類(lèi)實(shí)現(xiàn)接口的情況
```java interface info{ void show(); } enum Season1 implements info{ //用enum關(guān)鍵字后,首先要把類(lèi)里面定義的對(duì)象提到最前面,將一些重復(fù) // 的前綴的去掉,每個(gè)對(duì)象之間要用逗號(hào)隔開(kāi),最后一個(gè)用分號(hào) //后面的就沒(méi)有什么變化 SPRING ("春天","春意暖暖"), SUMMER ("春天","春意暖暖"), AUTUMN ("春天","春意暖暖"), WINTER ("春天","春意暖暖"); private final String seasonName; private final String seasonDeac; private Season1(String seasonName,String seasonDeac){ this.seasonDeac = seasonDeac; this.seasonName = seasonName; } public String getSeasonDeac() { return seasonDeac; } public String getSeasonName() { return seasonName; } //注意這時(shí)候沒(méi)有重寫(xiě)toString方法,即但是依然可以輸出對(duì)象 // 的內(nèi)容。即enum類(lèi)不是繼承object類(lèi),而是默認(rèn)繼承 //lang包下的enum類(lèi) @Override public void show() { System.out.println("這是一個(gè)季節(jié)"); } }
enum接口的實(shí)現(xiàn)和普通類(lèi)實(shí)現(xiàn)沒(méi)有什么區(qū)別
二、讓 枚舉類(lèi)的對(duì)象分別去實(shí)現(xiàn)接口中的抽象方法
```java ```java /** * @author LYH_351147852@QQ.COM * @create 2019-10-05 21:39 */ public class SeasonTest1 { public static void main(String[] args) { Season1[] values = Season1.values(); for (int i = 0;i < values.length;i++){ values[i].show(); } } } interface info{ void show(); } enum Season1 implements info{ //用enum關(guān)鍵字后,首先要把類(lèi)里面定義的對(duì)象提到最前面,將一些重復(fù) // 的前綴的去掉,每個(gè)對(duì)象之間要用逗號(hào)隔開(kāi),最后一個(gè)用分號(hào) //后面的就沒(méi)有什么變化 SPRING ("春天","春意暖暖"){ @Override public void show() { System.out.println("春天美好"); } }, SUMMER ("夏天","夏日炎炎"){ @Override public void show() { System.out.println("夏天炎熱"); } }, AUTUMN ("秋天","秋高氣爽"){ @Override public void show() { System.out.println("秋天寒冷"); } }, WINTER ("冬天","寒風(fēng)呼嘯"){ @Override public void show() { System.out.println("寒風(fēng)呼嘯"); } }; private final String seasonName; private final String seasonDeac; private Season1(String seasonName,String seasonDeac){ this.seasonDeac = seasonDeac; this.seasonName = seasonName; } public String getSeasonDeac() { return seasonDeac; } public String getSeasonName() { return seasonName; } //注意這時(shí)候沒(méi)有重寫(xiě)toString方法,即但是依然可以輸出對(duì)象 // 的內(nèi)容。即enum類(lèi)不是繼承object類(lèi),而是默認(rèn)繼承 //lang包下的enum類(lèi) // @Override // public void show() { // System.out.println("這是一個(gè)季節(jié)"); // } }
在每一個(gè)對(duì)象逗號(hào)前面加一個(gè)大括號(hào),然后里面寫(xiě)上重寫(xiě)的方法
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
java常量字符串過(guò)長(zhǎng)報(bào)錯(cuò)的解決辦法以及原因分析
在IDEA中字符串長(zhǎng)度超過(guò)65535,進(jìn)行打印,IDEA會(huì)提示java:常量字符串過(guò)長(zhǎng),這篇文章主要給大家介紹了關(guān)于java常量字符串過(guò)長(zhǎng)報(bào)錯(cuò)的解決辦法以及原因分析,需要的朋友可以參考下2023-01-01關(guān)于Java的HashMap多線程并發(fā)問(wèn)題分析
HashMap是采用鏈表解決Hash沖突,因?yàn)槭擎湵斫Y(jié)構(gòu),那么就很容易形成閉合的鏈路,這樣在循環(huán)的時(shí)候只要有線程對(duì)這個(gè)HashMap進(jìn)行g(shù)et操作就會(huì)產(chǎn)生死循環(huán),本文針對(duì)這個(gè)問(wèn)題進(jìn)行分析,需要的朋友可以參考下2023-05-05基于Java SSM的健康管理小程序的實(shí)現(xiàn)
本篇文章主要為大家分享了基于SSM健康管理小程序的設(shè)計(jì)與實(shí)現(xiàn)。感興趣的小伙伴可以了解一下2021-11-11如何使用Jackson和JSON Pointer查詢(xún)解析任何JSON節(jié)點(diǎn)
本文介紹了JSON Pointer是字符串表達(dá)式,可以非常方便解析復(fù)雜JSON節(jié)點(diǎn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09深入淺析Java Object Serialization與 Hadoop 序列化
序列化是指將結(jié)構(gòu)化對(duì)象轉(zhuǎn)化為字節(jié)流以便在網(wǎng)絡(luò)上傳輸或者寫(xiě)到磁盤(pán)永久存儲(chǔ)的過(guò)程。下面通過(guò)本文給大家分享Java Object Serialization與 Hadoop 序列化,需要的朋友可以參考下2017-06-06