java中enum的values()方法定义在哪里呢?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中enum的values()方法定义在哪里呢?相关的知识,希望对你有一定的参考价值。
最近在看枚举类型的时候,发现用For-each循环遍历enum中的值时,通过“enum类型名“.values()时可以获得枚举类型中的值,而我好奇去查看java6的API文档里,却发现:
1)java.lang.Enum中只有valueOf()的方法,并没有values();
2)java.lang.Object我亦并未找到values();
然后我直接去查看Enum和Object的源代码也没有发现该方法,
而在google上查,我也没有找到答案,所以在这里提问,enum的values()方法在哪里?
最后十分感谢您浪费宝贵的时间把我的提问看完,我也十分期待您的帮助。
关于详细的说明可以参考:
http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html
http://blog.sina.com.cn/s/blog_6fd0fd4b01014x8l.html 参考技术A 这个方法在java.lang.annotation 包的Enum ElementType下
ElementType(成员类型类)继承了Enum接口,增加了values方法
参考资料:http://download.oracle.com/javase/6/docs/api/java/lang/annotation/ElementType.html#values()
本回答被提问者采纳java成神之——enum枚举操作
枚举
声明
基本使用
public enum ChineseNumber {
YI,
ER,
SAN,
SI
}
ChineseNumber.values(); // ["YI","ER","SAN","SI"]
枚举遍历
for (ChineseNumber s : ChineseNumber.values()) {
System.out.println(s.name());
}
枚举在switch中使用
ChineseNumber s = ChineseNumber.ER;
switch(s) {
case YI:
System.out.println("一");
break;
case ER:
System.out.println("二");
break;
case SAN:
System.out.println("三");
break;
case SI:
System.out.println("四");
break;
}
枚举比较
Boolean b = ChineseNumber.YI == ChineseNumber.ER;
Boolean b = ChineseNumber.YI.equals(ChineseNumber.ER);
枚举静态构造方法
public enum ChineseNumber {
YI(1),
ER(2),
SAN(3),
SI(4);
private int value;
ChineseNumber(int value) {
this.value = value;
}
public int getValue() {
return value;
}
}
ChineseNumber.YI.getValue(); // 1
使用类来模拟枚举
class MyEnum<T extends MyEnum<T>> implements Comparable<T>, Serializable{
public static final MyEnum ONE = new MyEnum(1);
public static final MyEnum TWO = new MyEnum(2);
public static final MyEnum THERE = new MyEnum(3);
public static final MyEnum FOUR = new MyEnum(4);
private int value;
private MyEnum(int value){
this.value = value;
}
public int getValue() {
return value;
}
}
MyEnum.TWO.getValue();
枚举中定义抽象方法
public enum MyAction {
fn {
public String execute() {
return "execute this method";
}
};
public abstract String execute();
};
MyAction.fn.execute();
枚举实现接口
public enum RegEx implements Predicate<String> {
LETTERS("[a-zA-Z]+");
private final Pattern pattern;
private RegEx(final String pattern) {
this.pattern = Pattern.compile(pattern);
}
@Override
public boolean test(final String input) {
return this.pattern.matcher(input).matches();
}
}
RegEx.LETTERS.test("abc");
或者
public enum RegEx implements Predicate<String> {
ISLETTERS {
@Override
public boolean test(final String input) {
return Pattern.compile("[a-zA-Z]+").matcher(input).matches();
}
};
}
RegEx.ISLETTERS.test("abc");
单例模式
枚举是实现单例模式目前最好最优的方法
枚举被引用时才会实例化
public enum MySingletonPattern {
Loneliness;
private MySingletonPattern () {}
public String SomeWords() {
return "I am so lonely";
}
}
MySingletonPattern.Loneliness.SomeWords();
使用静态代码快
public enum EnglishWord {
a,b,c,d;
private String upper;
String getUpper() {
return upper;
}
static {
a.upper = "A";
b.upper = "B";
c.upper = "C";
d.upper = "D";
}
}
EnglishWord.a.getUpper();
EnumSet
EnumSet<EnglishWord> set = EnumSet.range(EnglishWord.a, EnglishWord.b); // 取枚举部分值from...to
EnumSet<EnglishWord> set = EnumSet.of(EnglishWord.a);
EnumMap
public enum EnglishLowerWord {
a, b, c;
}
public enum EnglishUpperWord {
A, B, C;
}
EnumMap<EnglishLowerWord, EnglishUpperWord> map = new EnumMap<EnglishLowerWord, EnglishUpperWord>(EnglishLowerWord.class);
map.put(EnglishLowerWord.a, EnglishUpperWord.A);
map.put(EnglishLowerWord.b, EnglishUpperWord.B);
map.put(EnglishLowerWord.c, EnglishUpperWord.C);
结语
本文章是java成神的系列文章之一
如果你想知道,但是本文没有的,请下方留言
我会第一时间总结出来并发布填充到本文
以上是关于java中enum的values()方法定义在哪里呢?的主要内容,如果未能解决你的问题,请参考以下文章