Posted on 2006-04-26 22:09
iceboundrock 阅读(906)
评论(0) 编辑 收藏 所属分类:
J2SE随笔
1
import
java.util.HashMap;
2
3
/** */
/**
4
* 枚举类型的基类
5
*
@author
Richard Lee
6
*
7
*/
8
public
abstract
class
EnumBase
{
9
10
//////////////////////////////////////////
/
11
//
成员变量
12
private
final
String name;
13
private
int
value
=
-
1
;
14
15
16
//////////////////////////////////////////
/
17
//
类静态变量
18
private
static
final
HashMap valueCollection
=
new
HashMap();
19
private
static
final
HashMap nameCollection
=
new
HashMap();
20
21
//////////////////////////////////////////
/
22
//
类静态方法
23
public
static
EnumBase valueOf(Class enumType ,
int
value)
{
24
return
(EnumBase)valueCollection.get(getEnumValueKey(enumType, value));
25
}
26
27
public
static
EnumBase parse(Class enumType , String s)
{
28
return
(EnumBase)nameCollection.get(getEnumNameKey(enumType , s));
29
}
30
31
private
static
String getEnumValueKey(Class enumClass,
int
value)
{
32
return
enumClass.getName()
+
"
,
"
+
value;
33
}
34
35
private
static
String getEnumNameKey(Class enumType , String name)
{
36
return
enumType
+
"
,
"
+
name;
37
}
38
39
//////////////////////////////////////////
/
40
//
构造函数
41
protected
EnumBase(String name)
{
42
checkName(name);
43
this
.name
=
name;
44
nameCollection.put(getEnumNameKey(name) ,
this
);
45
}
46
47
protected
EnumBase(String name ,
int
value)
{
48
this
(name);
49
50
checkValue(value);
51
this
.value
=
value;
52
valueCollection.put(getEnumValueKey(value) ,
this
);
53
}
54
55
56
//////////////////////////////////////////
/
57
//
成员函数
58
private
String getEnumNameKey(String name)
{
59
return
getEnumNameKey(
this
.getClass() , name);
60
}
61
62
private
void
checkName(String name)
{
63
if
(
null
==
name
||
""
.equals(name))
{
64
throw
new
IllegalArgumentException(
"
Element name can not be null or empty.
"
);
65
}
66
if
(nameCollection.containsKey(getEnumNameKey(name)))
{
67
throw
new
IllegalStateException(
"
The name of enum element already exist.
"
);
68
}
69
}
70
71
private
void
checkValue(
int
value)
{
72
if
(value
<
0
)
{
73
throw
new
IllegalArgumentException(
"
Element value must not less than 0.
"
);
74
}
75
if
(valueCollection.containsKey(getEnumValueKey(value)))
{
76
throw
new
IllegalStateException(
"
This value of enum element already exist.
"
);
77
}
78
}
79
80
private
String getEnumValueKey(
int
value)
{
81
return
getEnumValueKey(
this
.getClass() , value);
82
}
83
84
public
String toString()
{
85
return
name;
86
}
87
88
public
int
getValue()
{
89
if
(value
>
-
1
)
{
90
return
value;
91
}
else
{
92
throw
new
IllegalStateException(
"
This enum class has no value
"
);
93
}
94
}
95
}
96
使用范例:
public
class
VaildEnum
extends
EnumBase
{
protected
VaildEnum(String name ,
int
value)
{
super
(name , value);
}
public
static
final
VaildEnum Rule
=
new
VaildEnum(
"
Rule
"
,
1
);
public
static
final
VaildEnum OU
=
new
VaildEnum(
"
OU
"
,
2
);
}
该枚举基类对于j2sdk中常用的整型常量或者字符串型常量的优点:1. 类型安全。2.性能提高(比字符串常量型)。3.在IDE中使用时会有提示,无需翻看SDK文档。
缺点:1.编写略微麻烦。
如果发现代码中的bugs,欢迎您评论,非常感谢。