public abstract class EnumSyntax extends Object implements Serializable, Cloneable
public class Bach extends EnumSyntax {
public static final Bach JOHANN_SEBASTIAN = new Bach(0);
public static final Bach WILHELM_FRIEDEMANN = new Bach(1);
public static final Bach CARL_PHILIP_EMMANUEL = new Bach(2);
public static final Bach JOHANN_CHRISTIAN = new Bach(3);
public static final Bach P_D_Q = new Bach(4);
private static final String[] stringTable = {
"Johann Sebastian Bach",
"Wilhelm Friedemann Bach",
"Carl Philip Emmanuel Bach",
"Johann Christian Bach",
"P.D.Q. Bach"
};
protected String[] getStringTable() {
return stringTable;
}
private static final Bach[] enumValueTable = {
JOHANN_SEBASTIAN,
WILHELM_FRIEDEMANN,
CARL_PHILIP_EMMANUEL,
JOHANN_CHRISTIAN,
P_D_Q
};
protected EnumSyntax[] getEnumValueTable() {
return enumValueTable;
}
}
然后,您可以编写使用==
和!=
运算符来测试枚举值的代码;
例如:
Bach theComposer;
. . .
if (theComposer == Bach.JOHANN_SEBASTIAN) {
System.out.println ("The greatest composer of all time!");
}
枚举类的equals()
方法只是对相同的对象进行测试( ==
)。
您可以通过调用toString()
将枚举值转换为字符串。 该字符串从枚举类提供的表中获取。
在引擎盖下,枚举值只是一个整数,枚举类中每个枚举值是不同的整数。 您可以通过调用getValue()
获取枚举值的整数值。 构建枚举值的整数值(见EnumSyntax(int)
)。 由于构造函数被保护,唯一可能的枚举值是在枚举类中声明的单例对象; 在运行时无法创建其他枚举值。
您可以定义枚举类的子类,并将其扩展为附加枚举值。 子类的枚举值的整数值不需要与超类的枚举值的整数值不同; 该==
, !=
, equals()
和toString()
方法仍然正常工作,即使子类使用一些相同的整数值作为超的。 但是,使用枚举类和子类的应用程序可能需要在超类和子类中具有不同的整数值。
Modifier | Constructor and Description |
---|---|
protected |
EnumSyntax(int value)
用给定的整数值构造一个新的枚举值。
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
返回此枚举值的克隆,其中保留枚举值的语义是与此枚举值相同的对象。
|
protected EnumSyntax[] |
getEnumValueTable()
返回枚举值枚举类的枚举值表。
|
protected int |
getOffset()
返回此枚举值枚举类使用的最小整数值。
|
protected String[] |
getStringTable()
返回枚举值枚举类的字符串表。
|
int |
getValue()
返回此枚举值的整数值。
|
int |
hashCode()
返回此枚举值的哈希码值。
|
protected Object |
readResolve()
在对象输入期间,将此反序列化枚举实例转换为枚举属性类中定义的适当枚举值。
|
String |
toString()
返回与此枚举值对应的字符串值。
|
public int getValue()
public Object clone()
public int hashCode()
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
protected Object readResolve() throws ObjectStreamException
getEnumValueTable()
返回的枚举值表中的索引
i -
L上,其中
i是此枚举值的整数值,
L是
getOffset()
返回的值。
ObjectStreamException
- 如果流不能反序列化
InvalidObjectException
- 如果枚举值表为null,则枚举值的整数值与枚举值表中的元素不对应,或枚举值表中的相应元素为空。
(注: InvalidObjectException
是的子类ObjectStreamException
,其中readResolve()
声明扔。)
protected String[] getStringTable()
getOffset()
返回的值, N是字符串表的长度。
在索引i中的字符串表中的元件- L是由返回的值toString()
用于枚举值其整数值是i。
如果任何枚举值都不使用上述范围内的整数,请将相应的表格元素留空。
默认实现返回null。 如果枚举类(EnumSyntax类的子类)不覆盖此方法以返回非空字符串表,并且子类不覆盖toString()
方法,则基类toString()
方法将仅返回此枚举值的字符串表示形式整数值。
protected EnumSyntax[] getEnumValueTable()
getOffset()
返回的值, N是枚举值表的长度。
索引i - L的枚举值表中的元素是整数值为i的枚举值对象;
readResolve()
方法需要这样才能在枚举实例的反序列化过程中保留单例语义。
如果任何枚举值都不使用上述范围内的整数,请将相应的表格元素留空。
默认实现返回null。 如果枚举类(类EnumSyntax的子类)不覆盖此方法以返回非空枚举值表,并且子类不覆盖readResolve()
方法,则基类readResolve()
方法将在枚举实例为从对象输入流反序列化。
protected int getOffset()
默认实现返回0.如果枚举类(EnumSyntax类的子类)使用从0以外的整数值,请在子类中覆盖此方法。