第11章 枚举与泛型

本文详细介绍了Java中的枚举与泛型。枚举提供了一种安全的常量定义方式,具有类型安全、紧凑高效的特点。通过枚举类型,可以避免传统常量定义的类型转换风险。泛型则提供了类型安全的机制,有效避免了强制类型转换可能导致的ClassCastException。泛型在定义类、接口、集合时使用,确保了代码的类型一致性,提高了代码的可读性和安全性。
摘要由CSDN通过智能技术生成

 目录

11.1 枚举

11.1.1 使用枚举类型设置常量

11.1.2 深入了解枚举类型

11.1.3 使用枚举类型的优势

11.2 泛型

11.2.1 回顾“向上转型”与“向下转型”

11.2.2 定义泛型类

11.2.3 泛型的常规用法

11.2.4 泛型的高级用法

11.2.5 泛型总结


11.1 枚举

        JDK 1.5 中新增了枚举,枚举是一种数据类型,它是一系列具有名称的常量的集合。比如在数学中所学的集合: A={1,2,3}, 当使用这个集合时,只能使用集合中的1、2、3这3个元素,不是这3个元素的值就无法使用。Java中的枚举是同样的道理,比如在程序中定义了一个性别枚举,里面只有两个值:男、女,那么在使用该枚举时,只能使用男和女这两个值,其他的任何值都是无法使用的。

11.1.1 使用枚举类型设置常量

       以往设置常量,通常将常量放置在接口中,这这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰行符为final与static。

        例如,在项目中创建 Constants接口,在接口中定义常量的常规规方式。

public interface Constants {
    public static final int Constants_A=1;
    public static final int Constants_B=12;
}

        在JDK 1.5版本中新增枚举类型后就逐渐取代了这种常量定义方式,因为通过使用枚举类型,可以赋予程序在编译时进行检查的功能。使用枚举类型定义常量的语法如下:

public enum Constants{
    Constants A, 
    Constants B, 
    Constants C;
}

        其中,enum 是定义枚举类型的关键字。当需要在程序中使用用该常量时,可以使用 Constants. Constants_A 来表示。

interface EnumInterface {
		public String getDescription();
		public int getI();
	}
public class ConstantsTest {
	enum Constants2{
		Constants_A,Constants_B
	}
	public static void doit(int c) {
		switch (c) {
		case Constants.Constants_A:
			System.out.println("doit() Constants.Constants_A");
			break;
		case Constants.Constants_B:
			System.out.println("doit() Constants.Constants_B");
			break;
		}
	}
	public static void doit2(Constants2 c) {
		switch (c) {
		case Constants_A:
			System.out.println("doit2() Constants.Constants_A");
			break;
		case Constants_B:
			System.out.println("doit2() Constants.Constants_B");
			break;
	}
}
	public static void main(String[] args) {
		ConstantsTest.doit(Constants.Constants_A);
		ConstantsTest.doit2(Constants2.Constants_A);
		ConstantsTest.doit2(Constants2.Constants_B);
		ConstantsTest.doit(3);	
		}
	}

 

        在上述代码中,当用户调用doit( )方法时, 即使编译器不接受在接口中定义的常量参数,也不会报错;但调用doit2( )方法,任意传递参数,编译器就会报错,因为这个方法只接受枚举类型的常量作为其参数。       

  说明:枚举类型可以在类的内部进行定义,也可以在类的外音部定义。如果在类的内部定义,则类似于内部类形式。

11.1.2 深入了解枚举类型

1.操作枚举类型成员的方法

        枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。

        用户可以将一个枚举类型看作是一个类,它继承于java.langEnum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个 实例,这些枚举类型成员都默认被final、public、static 修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

        由于枚举类型对象继承于java.langEnum 类, 所以该类中一些操作枚举类型的方法都可以应用到枚举类型中。

方法名称 具体含义 使用方法
values( ) 该方法可以将枚举类型成员以数组的形式返回 枚举类型名称.values( )
valueOf( ) 该方法可以实现将普通字符串转换为枚举实例 枚举类型名称.valueOf("abc")
compareTo( ) 该方法用于比较两个枚举对象在定义时的顺序 枚举对象.compareTo( )
ordinal( ) 该方法用于得到枚举成员的位置索引 枚举对象.ordinal( )

(1)values()

        枚举类型实例包含一个values()方法,该方法可以将枚举类型成员以数组的形式返回。

public class ShowEnum {
	enum Constants{
		Constants_A,Constants_B,Constants_C,Constants_D
	}
	public static void main(String[] args) {
		Constants enumArray[] = Constants.values();
		for(int i = 0;i<enumArray.length;i++) {
			System.out.println("枚举类型成员变量:"+ enumArray[i]);
		}
	}
}

 

       在实例中,由于values()方法将枚举类型的成员以数组的形式返回,所以根据该数组的长度进行循环操作,然后将该数组中的值返回。

(2)valueOf() 与 compareTo()

        枚举类型中静态方法valueOf()可以将普通字符串转换为枚举类型,而compareTo()方法用于比较两个枚举类型成员定义时的顺序。调用 comparo eTo()方法时,如果方法中参数在调用该方法的枚举对象位置之前,则返回正整数;如果两个互相比较的枚举成员的位置相同,则返回 0;如果方法中参数在调用该方法的枚举对象位置之后,则返回负整数。

import static java.lang.System.out;
enum Constants2 { // 将常量放置在枚举类型中
	Constants_A, 
	Constants_B, 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值