Java 列舉7個特性
阿新 • • 發佈:2018-12-12
**在JDK1.5 之前,我們定義常量都是: public static final… 。現在好了,有了列舉,可以把相關的常量分組到一個列舉型別裡,而且列舉提供了比常量更多的方法。 **
- 自定義列舉
package cn.itcast.test; /** * 自定義列舉方法 * * @author cjj * @date 2018年9月28日 * @email [email protected] * @blog blog.csdn.net/qq_29451823 */ public enum MyEnumTest1 { CJJ("帥氣", 1), LX("成熟", 2), LQ("老氣", 3); private String name; private Integer index; // 其中構造方法的訪問許可權必須比類的許可權小 private MyEnumTest1(String name, Integer index) { this.name = name; this.index = index; } public static String getName(Integer index) { for (MyEnumTest1 c : MyEnumTest1.values()) { if (c.getIndex() == index) { return c.getName(); } } return null; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getIndex() { return index; } public void setIndex(Integer index) { this.index = index; } }
- 主函式執行
package cn.itcast.test; /** * 主函式入口 * @author cjj * @date 2018年9月28日 * @email [email protected] * @blog blog.csdn.net/qq_29451823 */ public class MainTest { public static void main(String[] args) { for(int i=1 ; i <= MyEnumTest1.values().length ; i++) { System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i)); } } }
3.執行結果 4.重寫ToString 方法
package cn.itcast.test; /** * 主函式入口 * @author cjj * @date 2018年9月28日 * @email [email protected] * @blog blog.csdn.net/qq_29451823 */ public class MainTest { public static void main(String[] args) { for(int i=1 ; i <= MyEnumTest1.values().length ; i++) { System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i)); //根據具體的列舉名稱來尋找對應的列舉常量 MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ"); System.out.println(test); } } }
執行效果: 5.實現介面 自定義介面MyInterceptor
package cn.itcast.test;
public interface MyInterceptor {
void printf();
String getInfo();
}
列舉實現介面
package cn.itcast.test;
/**
* 自定義列舉方法
*
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public enum MyEnumTest1 implements MyInterceptor{
CJJ("帥氣", 1), LX("成熟", 2), LQ("老氣", 3);
private String name;
private Integer index;
// 其中構造方法的訪問許可權必須比類的許可權小
private MyEnumTest1(String name, Integer index) {
this.name = name;
this.index = index;
}
public static String getName(Integer index) {
for (MyEnumTest1 c : MyEnumTest1.values()) {
if (c.getIndex() == index) {
return c.getName();
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
public static MyEnumTest1 GetMyEnumTest1(String input) {
return valueOf(input);
}
@Override
public String toString() {
return "MyEnumTest1[ " + this.index + this.name + " ] ";
}
@Override
public void printf() {
//name 代表列舉中常量中具體的引數
System.out.println(this.index + this.name);
}
@Override
public String getInfo() {
//其中name()代表具體的列舉種常量名
return this.name();
}
}
主函式類
package cn.itcast.test;
/**
* 主函式入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
// for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
// System.out.println("第"+i+"個元素是:"+MyEnumTest1.getName(i));
// //根據具體的列舉名稱來尋找對應的列舉常量
// MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
// System.out.println(test);
// }
MyInterceptor test2 = MyEnumTest1.CJJ;
test2.printf();
System.out.println(test2.getInfo());
}
}
執行結果 6.在介面內部寫列舉實現介面
package cn.itcast.test;
/**
* 列舉在介面的內部
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public interface AtInterfaceInnnerEnum {
enum Coffee implements AtInterfaceInnnerEnum {
LEFT_COFFEE,HEAD_COFFEE,RIGHT_COFFEE,BOTTON_COFFEEE;
}
enum Dessert implements AtInterfaceInnnerEnum {
LIKE_DESSERT,HEAT_DESSERT;
}
}
主函式
package cn.itcast.test;
import cn.itcast.test.AtInterfaceInnnerEnum.Dessert;
/**
* 主函式入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
for(AtInterfaceInnnerEnum.Coffee c : AtInterfaceInnnerEnum.Coffee.values()) {
System.out.println(c);
}
AtInterfaceInnnerEnum inEnum = AtInterfaceInnnerEnum.Coffee.BOTTON_COFFEEE;
System.out.println(inEnum);
AtInterfaceInnnerEnum inEnum1 = AtInterfaceInnnerEnum.Dessert.LIKE_DESSERT;
System.out.println(inEnum1);
}
}
執行結果 7.java.util.EnumSet和java.util.EnumMap是兩個列舉集合。
package cn.itcast.test;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* 主函式入口
* @author cjj
* @date 2018年9月28日
* @email [email protected]
* @blog blog.csdn.net/qq_29451823
*/
public class MainTest {
public static void main(String[] args) {
//建立一個元素就是MyEnumTest1型別的元素的集合
EnumSet st1 = EnumSet.allOf(MyEnumTest1.class);
System.out.println(st1);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
//建立一個元素指定為MyEnumTest1型別的空集合
EnumSet st2 = EnumSet.noneOf(MyEnumTest1.class);
System.out.println(st2);//輸出[]
st1.add(MyEnumTest1.CJJ);
st2.add(MyEnumTest1.LQ);
System.out.println(st1);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
System.out.println(st2);//輸出[MyEnumTest1[ 3老氣 ] ]
EnumSet st3 = EnumSet.of(MyEnumTest1.CJJ,MyEnumTest1.LQ);//插入幾個資料就有幾個
System.out.println(st3);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 3老氣 ] ]
EnumSet<MyEnumTest1> st4 = EnumSet.range(MyEnumTest1.CJJ, MyEnumTest1.LQ);//插入資料的範圍
System.out.println(st4);//輸出[MyEnumTest1[ 1帥氣 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老氣 ] ]
//EnumMap集合
EnumMap ma1 = new EnumMap(MyEnumTest1.class);
System.out.println("map的列舉"+ma1);//輸出map的列舉{}
ma1.put(MyEnumTest1.CJJ, "愛你額");
System.out.println("map的列舉"+ma1);//輸出map的列舉{MyEnumTest1[ 1帥氣 ] =愛你額}
}
}