Java从入门到精通_学习笔记18(枚举类型与泛型)

枚举类型与泛型

枚举类型

使用枚举类型,可以取代前面学习过的定义常量的方式,同时**枚举类型还赋予程序在编译时进行检查的功能。**继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、public、static修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。

1. 使用枚举类型设置常量

使用enum关键字定义枚举类型;

// 枚举类型定义常量的语法如下
public enum Constants{ // 定义枚举类型
	Constants_A, // 常量列表,每个常量之间用逗号隔开
	Constants_B,
	Constants_C;	
}

注:

  • 枚举类型可以在类的内部进行定义;
  • 枚举类型中定义常量形成一个常量列表,各个常量之间用逗号隔开,如:星期一,星期二,星期三
  • 常量调用方式 :【枚举类型名 . 常量名】

2. 深入了解枚举类型

(1) 操作枚举类型成员的方法
在这里插入图片描述


(2) 枚举类型中的构造方法
在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符所修饰

import static java.lang.System.out;
public class EnumIndexTest {
	enum Constants{
		Constants_A("我是枚举类型A"), // 定义带参数的枚举类型
		Constants_B("我是枚举类型B"),
		Constants_C("我是枚举类型C"),
		Constants_D(3);	
		private String description;
		private int i = 4;
		private Constants(){
		}
		private Constants(String description) {
			this.description = discription;
		}
		private Constants(int i) {
			this.i = this.i + i;
		}
		private String getDescription(){
			return description;
		}
		public int getId(){
			return i;
		}
	}	
	public static void main(String args[]){
		for(int i = 0 ; i < Constants.values().length ; i++) {
			out.println(Constants.values()[i] + "调用getDescription()方法 : " + Constants.values()[i].getDescription());
		}
		out.println(Constants.valueOf("Constants_D") + "调用getId()方法:" + Constants.valueOf("Constants_D").getId());
	}
}

(3) 使用枚举类型的优势

  • 类型安全;
  • 紧凑有效的数据定义;
  • 可以和程序其他部分完美交互;
  • 运行效率高.

泛型

泛型实质上就是使程序员定义安全的类型

1.定义泛型类

泛型语法:

  • 类名<T> : T代表一个类型的名称

代码演示:

// 定义一个含有泛型的类
public class OverClass<T> {
	private T over; // 定义泛型成员变量
	public T getOver(){ // 定义泛型成员方法
		return over;
	}	
	public void setOver(T over) {
		this.over = over;
	}
	public static void main(String args[]){
		OverClass<Boolean> over1 = new OverClass<Boolean>(); // 实例化泛型类
		OverClass<Float> over2 = new OverClass<Float>();
		over1.setOver(true);
		over2.setOver(12.3f);
		Boolean b = over1.getOver();
		Float f = over2.getOver();
		System.out.println(b);
		System.out.println(f);
	}
}

2. 泛型的常规用法

(1) 定义泛型类是声明多个类型
语法如下:

  • 泛型类型名<T1 , T2>

(2) 定义泛型类时声明数组类型
语法如下:

  • T[ ] 数组名;

(3) 集合类声明容器的元素
使用K和V两个字符代表容器中的键值和与键值相对应的具体值。

Map<K,V> map = new HashMap<K,V>();

在这里插入图片描述


(4) 泛型的高级用法

  • 限制泛型可用类型

class 类名称 <T extends anyClass>


注:使用泛型限制后,泛型类的类型必须实现或继承了anyClass这个接口或类。无论anyClass是接口还是类,在进行泛型限制时都必须使用extends关键字。

  • 使用类型通配符

泛型类名称<? extends List> a = null;


注:在泛型机制中,提供了类型通配符,其主要作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。要声明这样一个对象可以使用 “?”通配符来表示,同时使用extends关键字来对泛型加以限制。

A<? extends List> a = null;
a1 = new A<ArrayList>();
a2 = new A<ArrayList>();

(3) 继承泛型类与实现泛型接口

//继承泛型类
public class ExtendClass<T1> {
}
class SubClass<T1,T2,T3> extends ExtendClass<T1>{
}
// 实现泛型接口
interface i<T1>{
}
class SubClass<T1,T2,T3> implements i<T1>{
}

5. 泛型总结

泛型的使用方法:

  • 泛型的类型参数只能是类类型,不可以是简单类型,如A这种泛型定义就是错误的;
  • 泛型的类型个数可以是多个;
  • 可以使用extends关键字限制泛型的类型;
  • 可以使用通配符限制泛型的类型;
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页