4.JAVA语言基础部分—枚举与泛型

枚举

//定义枚举
	enum MyEnum{
		ITEM_A,
		ITEM_B
	}
	public static void main(String[] args) {
		//values()获取所枚举项的集合
		MyEnum[] enums=MyEnum.values();
		for (MyEnum myEnum : enums) {
			print(myEnum.toString());//输出ITEM_A ITEM_B
		}
		
		//valueOf("字符串")把字符串转为枚举
		MyEnum myEnum=MyEnum.valueOf("ITEM_B");
		print(myEnum.toString());//结果 ITEM_B
		
		//compareTo(b)比较两者在定义时的顺序,若b后于比较者返回-1,小于比较者时返回1,相同时为0
		int i=MyEnum.ITEM_A.compareTo(MyEnum.ITEM_B);
		System.out.println(i);//结果 1
		 
		//ordinal()得到索引位置,从0开始
		int index=MyEnum.ITEM_B.ordinal();
		System.out.println(index);//结果 1
	}

枚举也有构造方法,但必须使用private,常用于给枚举项加标签说明功能

// 定义枚举
	enum MyEnum {
		ITEM_A("我是A啊"), ITEM_B("我是B呢"), ITEM_C(23); // 最后一项要写;

		private String description;
		private int num;

		// 构造方法须用private
		private MyEnum(String descn) {
			description = descn;
		}

		private MyEnum(int i) {
			num = i;
		}

		// 对外提供获取描述信息
		public String getDesn() {
			return description;
		}

		public int getI() {
			return num;
		}
	}

	public static void main(String[] args) {
		// values()获取所枚举项的集合
		MyEnum[] enums = MyEnum.values();
		for (MyEnum myEnum : enums) {
			print(myEnum.getDesn());// 我是A啊 我是B呢 null
		}
		System.out.print(MyEnum.ITEM_C.getI());// 23
	}

 

泛型

//可多个泛型,泛型可以约束
public class Examplte02<T1 extends List, T2> {
	//可以为字段类型使用泛型
	private T2[] mens;
	//参数可以泛型
	public void say(T2 arg) {
		System.out.println(arg);
	}
    //返回数据也可以为泛型
	public T1 getResult(T2 arg) {
		ArrayList<Integer> arrays = new ArrayList<Integer>();
		arrays.add((int) arg);
		return (T1) arrays;
	}
}

//调用 
	public static void main(String[] args) {
		//这里不需要具体到ArrayList<string>等, 且Integer不能使用int代替
		 Examplte02<ArrayList<Integer>, Integer> exam02=new Examplte02<ArrayList<Integer>, Integer>();
		 exam02.say(23);
		 ArrayList<Integer> a= exam02.getResult(25);
	}

枚举

使用类型通配符

格式: 泛型类名称<? extends List>

? 与T的区别在于,例如一个类里的现个方法要用到T泛型,那么在类上面也要写T。但?就不需要,不受限制。

public class Examplte02{
	 //这里使用通配符后,类名不需要与泛型T那样的写法
	public void say(ArrayList<? extends Number> arg) {
		System.out.println(arg.size());
	} 
}
 //调用 
	public static void main(String[] args) {
		Examplte02 e02=new Examplte02();	
		ArrayList<Integer> as=new ArrayList<Integer>();
		as.add(10);
		e02.say(as);
		//这里可传Double也行,因为Double继承于Number
		ArrayList<Double> as2=new ArrayList<Double>();
		as2.add(20d);
		e02.say(as2);
	}

注意

public class Examplte02{
	 //这里使用supper,说明类型必须是Number或Number的父类,这里向上限制;extends是向下限制
	public void say(ArrayList<? super Number> arg) {
		arg.add(25);//这里会报错,使用通配符后只能读和删除,不能新增或变更值
		arg.get(0);//这里正常
		arg.remove(0);//这里正常
		
		System.out.println(arg.size());
	} 
}
posted @ 2018-10-20 23:09  evemen  阅读(165)  评论(0编辑  收藏  举报