13.1 枚举类型
枚举类型是一种特殊的数据类型,它允许一个变量只能取预先定义好的一组离散值中的一个。在许多编程语言中,枚举类型通常用于表示具有一定范围内固定取值的情况,例如星期几、月份等。
13.1.1使用枚举类型设置常量
在Java中,枚举类型由enum关键字声明。以下是一个简单的例子,演示如何定义一个四季的枚举类型:
enum SeasonEnum {
spring,summer,autumn,winter;
}
例题13.1:分别创建四季的接口常量和枚举,比较两者的使用场景。
13.1.2 深入了解枚举类型
由于枚举类型较传统定义常量的方式,除具有参数类型检测的优势外,还具有其他方面的优势。
用户可以将一个枚举类型看作是一个类,它继承java.lang.Enum类。
枚举类型成员都默认被final、public、static修饰,所有当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可
由于枚举类型对象继承java.lang.Enum类,所有该类中一些操作枚举类型的方法都可以应用到枚举类型。
例题13.2:打印四季枚举中的所有枚举值
例题13.3:使用字符串创建一个季节的枚举值,并判断季节的位置
例题13.4:输出每一个季节的索引位置
例题13.5:为四季枚举创建构造方法,记录每一个季节特征
13.1.3 使用枚举类型的优势
枚举类型声明提供了一种对用户友好的变量定义方式,枚举了某种数据所有尽可能出现的值,总结枚举类型,具有以下特点:
类型安全
紧凑有效的数据定义
可以和程序其他部分完美交互
运行效率高
13.2 泛型
泛型(Generics)是Java编程语言的一项重要特性,它提供了一种在类、接口和方法中使用类型参数的机制,使得代码可以更加灵活、可重用、类型安全。
13.2.1 回顾向上转型与向下转型
public class Test{
private Object b;
public Object getB(){
return b;
}
public void setB(Object b){
this.b = b;
}
public static void main(String[] age){
Test t = new Test();
t.setB(Boolean.valueOf(true));
System.out.println(t.getB());
t.setB(Float.valueOf("12.3"));
Float f = (Float) t.getB();
System.out.println(f);
}
}
true
12.3
13.2.2 定义泛型类
T是泛型的名称,代表一种类型。开发者在创建该对象时需要指定T所代表的值与返回的值都以Object类型为主,当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则在运行时都将会发生ClassCastException异常。
例题13.6:创建带泛型的图书类
-
-
13.2.3 泛型的常规用法
定义泛型类时声明多个类型
-
class MyClass<T1,T2>{}
-
其中t1和t2为可能被定义的类型。
这样,在实例化指定类型的对象时就可以指定多个类型。例如:
MyClass<Boolean>,Float>m=new MyClass<Boolean,Float>();
例题13.7:定义泛型数组
13.2.4 泛型的高级用法
13.2.5 泛型总结
泛型的类型参数只能是类类型,不可以是简单型,如A<int>这种泛型定义就是错的
泛型的类型个数可以是多个
可以使用extends关键字限制泛型的类型
可以使用通配符限制泛型的类型