电力网站怎么做随州网站建设便宜
news/
2025/10/3 19:07:03/
文章来源:
电力网站怎么做,随州网站建设便宜,蓝色为主的网站案例,海南 网站开发Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum.
一、类定义
public abstract class EnumE extends EnumEimplements ComparableE, …Enum是一个特殊的类. 我们不能以class Xxx extends Enum的方式手动继承, 必须写成enum Xxx的形式; 然而这段枚举类的定义在编译之后又变回了class Xxx extends Enum.
一、类定义
public abstract class EnumE extends EnumEimplements ComparableE, Serializable {}Enum是一个虚基类继承了Number抽象类,可以用于数字类型的一系列转换;实现了Comparable接口,强行对实现它的每个类的对象进行整体排序
二、成员常量和取值器
//成员常量name被声明为final类型意为不可变同时只提供取值器。
private final String name;
public final String name() {return name;
}
//成员常量ordinal被声明为final类型意为不可变同时只提供取值器。
private final int ordinal;
public final int ordinal() {return ordinal;
}三、构造函数 protected Enum(String name, int ordinal) {this.name name;this.ordinal ordinal;}构造函数被定义成protected参数有两个分别是name和ordinal和成员常量相呼应。
四、常用方法
1、toString()
返回成员常量name的值。 public String toString() {return name;}2、equals()
参数为Object类型方法内部判断是不是和this指向同一对象。注意这个方法final被修饰也就是说枚举不可以覆写这个类。 public final boolean equals(Object other) {return thisother;}3、hashCode()
委托父类执行即Object类的hashCode方法执行。注意这个方法final被修饰也就是说枚举不可以覆写这个类。 public final int hashCode() {return super.hashCode();}4、clone()
直接抛出异常不支持拷贝。这也符合枚举唯一的特性。值得注意的是这个方法被定义成protected也就是只能包内和子类可见并且不可以覆写。 protected final Object clone() throws CloneNotSupportedException {throw new CloneNotSupportedException();}5、compareTo()
有这个方法一方面是因为Enum类实现了Comparable接口一方面也符合枚举可以比较的特点。值得注意的是方法内部可以看出要求比较的对象必须是相同枚举类型的否则便会引起ClassCastException异常。对相同类型枚举值比较的则是它们的成员常量ordinal大小。 public final int compareTo(E o) {Enum? other (Enum?)o;EnumE self this;if (self.getClass() ! other.getClass() // optimizationself.getDeclaringClass() ! other.getDeclaringClass())throw new ClassCastException();return self.ordinal - other.ordinal;}6、getDeclaringClass()
这个方法在compareTo()方法中出现了。 SuppressWarnings(unchecked)public final ClassE getDeclaringClass() {Class? clazz getClass();Class? zuper clazz.getSuperclass();return (zuper Enum.class) ? (ClassE)clazz : (ClassE)zuper;}7、valueOf()
通过参数name来返回枚举值注意如果name没有与之对应的枚举返回的不是null而是抛出异常。
public static T extends EnumT T valueOf(ClassT enumType,String name) {T result enumType.enumConstantDirectory().get(name);if (result ! null)return result;if (name null)throw new NullPointerException(Name is null);throw new IllegalArgumentException(No enum constant enumType.getCanonicalName() . name);}8、readObject
防治反序列化的使用private来定义方法且在方法内部抛出异常。目的就是为了维护枚举值的唯一性。
private void readObject(ObjectInputStream in) throws IOException,ClassNotFoundException {throw new InvalidObjectException(cant deserialize enum);}9、readObjectNoData()
同readObject方法一样都是为了防止反序列化的。 private void readObjectNoData() throws ObjectStreamException {throw new InvalidObjectException(cant deserialize enum);}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/926220.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!