Java 利用枚舉實現(xiàn)接口進行統(tǒng)一管理
枚舉公共接口
public interface IPairs<K, V, C extends Enum> {
/**
* 返回枚舉對象
* */
C get();
/**
* 返回枚舉項的 key
* */
K key();
/**
* 返回枚舉項的 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;
}
}
響應枚舉類
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;
}
}
代碼驗證
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()));
}
}
程序運行結果
true key: 1, value: record has been enabled true key: 10,000, value: success
結論:
項目中使用同一接口管理枚舉類, 在方法參數(shù)中使用接口而不是用具體的枚舉對象作為入?yún)ⅲ?可以一定程度上降低程序的耦合性
補充:java中enum類的兩種接口的實現(xiàn)方法
和普通 Java 類一樣,枚舉類可以實現(xiàn)一個或多個接口
若每個枚舉值在調用實現(xiàn)的接口方法呈現(xiàn)相同的行為方式,則只 要統(tǒng)一實現(xiàn)該方法即可。
若需要每個枚舉值在調用實現(xiàn)的接口方法呈現(xiàn)出不同的行為方式, 則可以讓每個枚舉值分別來實現(xiàn)該方法
1、enum關鍵字定義枚舉類實現(xiàn)接口的情況
```java
interface info{
void show();
}
enum Season1 implements info{
//用enum關鍵字后,首先要把類里面定義的對象提到最前面,將一些重復
// 的前綴的去掉,每個對象之間要用逗號隔開,最后一個用分號
//后面的就沒有什么變化
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;
}
//注意這時候沒有重寫toString方法,即但是依然可以輸出對象
// 的內容。即enum類不是繼承object類,而是默認繼承
//lang包下的enum類
@Override
public void show() {
System.out.println("這是一個季節(jié)");
}
}
enum接口的實現(xiàn)和普通類實現(xiàn)沒有什么區(qū)別
二、讓 枚舉類的對象分別去實現(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關鍵字后,首先要把類里面定義的對象提到最前面,將一些重復
// 的前綴的去掉,每個對象之間要用逗號隔開,最后一個用分號
//后面的就沒有什么變化
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 ("冬天","寒風呼嘯"){
@Override
public void show() {
System.out.println("寒風呼嘯");
}
};
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;
}
//注意這時候沒有重寫toString方法,即但是依然可以輸出對象
// 的內容。即enum類不是繼承object類,而是默認繼承
//lang包下的enum類
// @Override
// public void show() {
// System.out.println("這是一個季節(jié)");
// }
}
在每一個對象逗號前面加一個大括號,然后里面寫上重寫的方法
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關文章
如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點
本文介紹了JSON Pointer是字符串表達式,可以非常方便解析復雜JSON節(jié)點值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
深入淺析Java Object Serialization與 Hadoop 序列化
序列化是指將結構化對象轉化為字節(jié)流以便在網(wǎng)絡上傳輸或者寫到磁盤永久存儲的過程。下面通過本文給大家分享Java Object Serialization與 Hadoop 序列化,需要的朋友可以參考下2017-06-06

