熟练掌握JDK1.5枚举类型

1788445834680.apk 立即下载
在上一篇文章JDK1.5新特性简介里面,我们讨论了Enum的最简单形式,即类似于,
public enum Color{
    Red,
    Green,
    Blue;
}

      这篇文章我们来详细介绍一下enum的各项特征。Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。

   1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。

   2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义         变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
   3.Enum默认实现了java.lang.Comparable接口。

   4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

   5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
   6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

   7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。


    了解了这些基本特性,我们来看看如何使用它们。
    1.遍历所有有枚举值. 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。
    for (Color c: Color.values())
        System.out.println(“find value:” + c);

    2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。
public enum Color {
    Red,
    Green,
    Blue;    
    
    /*
     *定义一个变量表示枚举值的数目。
     *(我有点奇怪为什么sun没有给enum直接提供一个size方法).
     */
    private static int number = Color.values().length ;
    
    /**
     * 随机返回一个枚举值
     @return a random enum value.    
     */
    public static Color getRandomColor(){
        long random = System.currentTimeMillis() % number;
        switch ((int) random){
            case 0:
                return Color.Red;
            case 1:
                return Color.Green;
            case 2:
                return Color.Blue;
            default : return Color.Red;
        } 
    }
}

可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。


3.覆载(Override)toString, valueOf方法。
前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。
….
public String toString(){        
        switch (this){
            case Red:
                return "Color.Red";
            case Green:
                return "Color.Green";
            case Blue:
                return "Color.Blue";
            default:
                return "Unknow Color";
                        
        }
}
….
这时我们可以看到,此时再用前面的遍历代码打印出来的是
Color.Red
Color.Green
Color.Blue
而不是
Red
Green
Blue.
可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。

4.使用构造函数。
虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。

public enum Color {
    Red("This is Red"),
    Green("This is Green"),
    Blue("This is Blue");    
    
   private String desc;
   
Color(String desc){
        this.desc = desc;
    }

    public String getDesc(){
        return this.desc;
    }

 }
这里我们为每一个颜色提供了一个说明信息, 然后定义了一个构造函数接受这个说明信息。
要注意这里构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。

5.实现特定的接口
我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。

 
  6.定义枚举值自己的方法。
前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。
public enum Color {
    Red {    
        public String toString(){
            return "Color.Red";
        }
    },
    Green {
        public String toString(){
            return "Color.Green";
        }
    },
    Blue{
        public String toString(){
            return "Color.Blue";
        }

    };    
}
从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。


总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。

(以上代码在win2k+ 1.5.0-beta2-b51下运行通过)
运动员运动表现纵向数据集 纵向运动员运动表现数据集包含250名运动员10000条训练会话重复观测记录,涵盖篮球、排球、足球、跑步、游泳和无损伤跑步者六个运动类别。包括速度、加速度、反应时间、准确性、耐力、力量、敏捷性等表现变量,以及训练负荷、疲劳、恢复和训练成效指标。用于研究和实验分析。 立即下载

相关推荐

MATLAB中读写Zarr文件的接口。Zarr是一种用于科学数据的文件格式(类似于HDF5和netCDF),在云存储和并行计算环境中进行了优化.rar

MATLAB中读写Zarr文件的接口。Zarr是一种用于科学数据的文件格式(类似于HDF5和netCDF),在云存储和并行计算环境中进行了优化.rar

双立柱油脂加注机.rar

双立柱油脂加注机.rar

YOLO算法人像特写场景手势目标检测数据集-106张-包含 VOC 和 Yolo 格式标签-支持多种算法训练模型.zip

下拉可见数据集可视化效果示意。 YOLO人像特写场景手势目标检测数据集 目标类别:['peace', 'shaka', 'thumbsup'] 中文类别:['和平手势', '夏威夷手势', '竖起大拇指'] 训练集:79 张 验证集:16 张 测试集:11 张 总计:106 张 该数据集提供了data.yaml文件,内容如下: train: ../train/images val: ../valid/images test: ../test/images nc: 3 names: ['peace', 'shaka', 'thumbsup']

食品包装礼品包装设备.rar

食品包装礼品包装设备.rar

全自动iphone贴膜机3.rar

全自动iphone贴膜机3.rar

曲轴箱加工专机.rar

曲轴箱加工专机.rar

切线机.rar

切线机.rar

用Voronoi-Fresnel相位进行衍射无透镜成像的优化Matlab代码.rar

用Voronoi-Fresnel相位进行衍射无透镜成像的优化Matlab代码.rar

2026-2032全球与中国磷酸铁锂(LiFePO4)市场现状及未来发展趋势 Sample-yb.pdf

2026-2032全球与中国磷酸铁锂(LiFePO4)市场现状及未来发展趋势 Sample-yb.pdf

追踪重量选择算法 (TWSA) 对 OpenSim 剩余减少算法的优化 Matlab代码.rar

追踪重量选择算法 (TWSA) 对 OpenSim 剩余减少算法的优化 Matlab代码.rar

全自动端子连接器压入检测设备.rar

全自动端子连接器压入检测设备.rar

【有功-无功协调优化】基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化研究(Matlab代码实现)

内容概要:本文围绕基于改进多目标粒子群优化算法(小生境粒子群算法)的配电网有功-无功协调优化问题展开研究,旨在通过智能优化算法有效降低网络损耗、提升电压质量并增强配电系统的运行效率。研究系统地介绍了小生境粒子群算法的改进策略,构建了包含功率平衡、电压安全、设备容量等多重约束的多目标优化模型,并采用IEEE标准测试系统进行仿真验证,充分证明了该方法在处理多目标、多约束优化问题上的优越性能。全文涵盖从数学建模、算法设计、约束处理到多目标折衷解选择的完整流程,并配套提供了完整的Matlab代码实现,便于读者复现结果与进行二次开发。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事电力系统优化、智能算法研究或相关领域工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决配电网中有功与无功功率的协同优化问题,实现节能降耗与电压稳定;②学习并掌握多目标粒子群算法及其小生境改进策略在电力系统中的具体应用与实现细节;③通过Matlab代码进行仿真,加深对智能优化算法在工程实践中应用的理解,提升科研与工程实践能力。; 阅读建议:此资源以理论分析与代码实现紧密结合的方式呈现,建议读者在深入理解算法原理和模型构建的基础上,结合所提供的Matlab代码进行仿真实验,重点关注参数设置、收敛性分析与结果可视化等关键环节,从而实现从理论认知到实践验证的完整闭环。

数控贴膜机.rar

数控贴膜机.rar

上一篇: 一个基于TCP的聊天程序
下一篇: tomcat5.0+mysql配置JDBCRealm,DBCP,ssl,及中文乱码解决详解
dzeng81
博客等级 码龄23年 117粉丝 436原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值