zoukankan      html  css  js  c++  java
  • 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());
    	} 
    }
    
  • 相关阅读:
    Linux Mint---shutter截图软件
    Linux Mint---fcitx中文,日语输入法
    Linux Mint---安装docky
    Linux Mint---开启桌面三维特效
    Linux Mint---ATI显卡驱动安装篇
    Linux Mint---更新软件源
    Spring Cloud 微服务服务间调用session共享问题
    Jooq批量插入 batch
    idea安装SonarLint语法检测插件
    JVM到底是什么?
  • 原文地址:https://www.cnblogs.com/evemen/p/9823429.html
Copyright © 2011-2022 走看看