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)枚舉類
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)枚舉類
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é)果
truekey: 1, value: record has been enabledtruekey: 10,000, value: success結(jié)論:
項(xiàng)目中使用同一接口管理枚舉類, 在方法參數(shù)中使用接口而不是用具體的枚舉對(duì)象作為入?yún)ⅲ?可以一定程度上降低程序的耦合性
補(bǔ)充:java中enum類的兩種接口的實(shí)現(xiàn)方法
和普通 Java 類一樣,枚舉類可以實(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è)枚舉值分別來實(shí)現(xiàn)該方法
1、enum關(guān)鍵字定義枚舉類實(shí)現(xiàn)接口的情況```javainterface info{ void show();}enum Season1 implements info{ //用enum關(guān)鍵字后,首先要把類里面定義的對(duì)象提到最前面,將一些重復(fù) // 的前綴的去掉,每個(gè)對(duì)象之間要用逗號(hào)隔開,最后一個(gè)用分號(hào) //后面的就沒有什么變化 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í)候沒有重寫toString方法,即但是依然可以輸出對(duì)象 // 的內(nèi)容。即enum類不是繼承object類,而是默認(rèn)繼承 //lang包下的enum類 @Override public void show() { System.out.println('這是一個(gè)季節(jié)'); }}
enum接口的實(shí)現(xiàn)和普通類實(shí)現(xiàn)沒有什么區(qū)別
二、讓 枚舉類的對(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)鍵字后,首先要把類里面定義的對(duì)象提到最前面,將一些重復(fù) // 的前綴的去掉,每個(gè)對(duì)象之間要用逗號(hào)隔開,最后一個(gè)用分號(hào) //后面的就沒有什么變化 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í)候沒有重寫toString方法,即但是依然可以輸出對(duì)象 // 的內(nèi)容。即enum類不是繼承object類,而是默認(rèn)繼承 //lang包下的enum類// @Override// public void show() {// System.out.println('這是一個(gè)季節(jié)');// }}
在每一個(gè)對(duì)象逗號(hào)前面加一個(gè)大括號(hào),然后里面寫上重寫的方法
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. 學(xué)python最電腦配置有要求么2. Spring security 自定義過濾器實(shí)現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實(shí)例代碼)3. JAMon(Java Application Monitor)備忘記4. Java8內(nèi)存模型PermGen Metaspace實(shí)例解析5. python中用Scrapy實(shí)現(xiàn)定時(shí)爬蟲的實(shí)例講解6. 基于python實(shí)現(xiàn)操作git過程代碼解析7. python使用QQ郵箱實(shí)現(xiàn)自動(dòng)發(fā)送郵件8. Python Scrapy多頁數(shù)據(jù)爬取實(shí)現(xiàn)過程解析9. 解決redis與Python交互取出來的是bytes類型的問題10. Python 的 __str__ 和 __repr__ 方法對(duì)比
