日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java 枚举抽象方法_Java枚举抽象方法实战

發(fā)布時(shí)間:2025/7/14 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 枚举抽象方法_Java枚举抽象方法实战 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

枚舉類型是指由一組固定的常量組合成合法值的類型。

背景需求

本次需求中,已經(jīng)定了幾個(gè)固定的常量值,每個(gè)常量值都有相同的行為,但是具體的實(shí)現(xiàn)細(xì)節(jié)不同。建議使用枚舉抽象方法,好處:結(jié)構(gòu)清晰,便于擴(kuò)展。

枚舉常量方法

最常見(jiàn)的星期一到星期日的常量,假設(shè)每天都需要打印不同的消息。

定義一個(gè)抽象方法,用于描述打印行為。

星期常量Override抽象方法,實(shí)現(xiàn)具體的打印細(xì)節(jié)。

代碼演示如下:

public class EnumAbstract {

//對(duì)外提供方法

public void print(int key) {

keyOf(key).print();

}

public void print(WorkDays workDays){

workDays.print();

}

//獲取Key對(duì)應(yīng)的實(shí)例

private WorkDays keyOf(int key) {

switch (key) {

case 1:

return WorkDays.MONDAY;

case 2:

return WorkDays.TUESDAY;

case 3:

return WorkDays.WEDNESDAY;

case 4:

return WorkDays.THURSDAY;

case 5:

return WorkDays.FRIDAY;

case 6:

return WorkDays.SUNDAY;

case 7:

return WorkDays.SATURDAY;

default:

return null;

}

}

//最小訪問(wèn)權(quán)限設(shè)計(jì)原則,根據(jù)需要設(shè)置訪問(wèn)權(quán)限

private enum WorkDays {

MONDAY(1) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息1");

}

}, TUESDAY(2) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息2");

}

}, WEDNESDAY(3) {

@Override

protected void print() {

System.out.println(getKey()+": 消息3");

}

}, THURSDAY(4) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息4");

}

}, FRIDAY(5) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息5");

}

}, SATURDAY(6) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息6");

}

}, SUNDAY(7) {

@Override

protected void print() {

System.out.println(getKey()+" : 消息7");

}

};

private int key;

//私有化構(gòu)造方法

private WorkDays(int key) {

this.key = key;

}

public int getKey() {

return key;

}

public void setKey(int key) {

this.key = key;

}

//抽象方法

protected abstract void print();

}

}

代碼中的訪問(wèn)修飾符可根據(jù)需要修改。上述代碼僅用于演示。該代碼對(duì)外封裝細(xì)節(jié),僅提供了打印方法,使用此方法需要知道枚舉常量對(duì)應(yīng)的key值。如果知道枚舉值,可直接調(diào)用打印方法。workDays.print();

實(shí)戰(zhàn)

下面模擬實(shí)戰(zhàn)中的使用場(chǎng)景,遇到了一個(gè)難題,順便記錄一下。

項(xiàng)目中會(huì)遇到這樣的問(wèn)題,頁(yè)面上需要展示枚舉變量對(duì)應(yīng)的含義,這時(shí)有2中做法:

1. 頁(yè)面根據(jù)不同枚舉變量解析對(duì)應(yīng)的含義;

2. 枚舉變量在定義的時(shí)候,把key 定義為對(duì)應(yīng)的含義。

public enum WorkDaysName {

MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日");

private String name;

WorkDaysName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

下面模擬枚舉變量在前后端交互過(guò)程中的做法。

//模擬保存枚舉到數(shù)據(jù)庫(kù)

public static void testSave() {

String key = EnumAbstract.WorkDaysName.SUNDAY.name();

//保存枚舉實(shí)例對(duì)應(yīng)的name到數(shù)據(jù)庫(kù)

System.out.println("保存枚舉實(shí)例對(duì)應(yīng)的name到數(shù)據(jù)庫(kù) " + key);

}

//模擬從數(shù)據(jù)庫(kù)獲取

public static void testSelect() {

//模擬從數(shù)據(jù)庫(kù)獲取

EnumAbstract.WorkDaysName workDays = EnumAbstract.WorkDaysName.valueOf("SUNDAY");

System.out.println("模擬從數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)的枚舉實(shí)例 " + workDays);

System.out.println("模擬從數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)的枚舉實(shí)例的類型 " + workDays.getClass());

System.out.println("頁(yè)面直接展示:" + workDays + " 的name:" + workDays.getName());

}

結(jié)果:

保存枚舉實(shí)例對(duì)應(yīng)的name到數(shù)據(jù)庫(kù): SUNDAY

模擬從數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)的枚舉實(shí)例: SUNDAY

模擬從數(shù)據(jù)庫(kù)獲取對(duì)應(yīng)的枚舉實(shí)例的類型: class org.wuxinshui.boosters.designPatterns.enumAbstract.EnumAbstract$WorkDaysName

頁(yè)面直接展示:SUNDAY 的name:星期日

擴(kuò)展

總結(jié)

以上是生活随笔為你收集整理的java 枚举抽象方法_Java枚举抽象方法实战的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。