首页 > 其他 > 详细

枚举类型与泛型

时间:2020-04-07 22:49:28      阅读:75      评论:0      收藏:0      [点我收藏+]

枚举类型

  普通方法弊端: 1、当接口内的值赋值错了(有两个值一样的值),那么相应的类的选择分支会报错* 2、当输入不在范围内的数据时,不会报错。

  枚举类型: 好处:弥补了普通方法的不足,不会有值冲突导致报错,必须传入枚举定义过的具体参数,否则报错

枚举类型比较常用的方法:

  1. values();--->可以将枚举类型成员以数组的形式返回。

Constants enumArray[]=Constants.values();

  2. valueOf();--->可以将普通的字符串转换为枚举实例。

public enum Constants{
    Constants_A
}

Constants c=Constants.valueOf("Constants_A");

  注意:用此方法创建的枚举要真实存在,不然运行时会抛出(IllegalArgumentException)异常。

  3. compareTo();--->该方法用于比较两个枚举对象在定义时的顺序。

public enum Constants{
    Constants_A,
    Constants_B,
    Constants_C
}

/*
*将Constants_B与Constants_A、Constants_C进行compareTo方法。 *Constants_B.compareTo(Constants_A)
=1 *Constants_B.compareTo(Constants_C)=-1 *Constants_B.compareTo(Constants_B)=0
*/

  4. ordinal();--->用于得到枚举成员的索引位置。

public enum Constants{
    Constants_A,//<---索引为0
    Constants_B,//<---索引为1
    Constants_C//<---索引为2
}

 

使用枚举类型的优势

  1. 类型安全

  2. 紧凑有效的数据定义

  3. 可以和程序其他部分完美交互

  4. 运行效率高

“向上转型”与“向下转型”

  1. 父类 a=new 子类();--->向上转型,自动转型

  2. 子类 b=new 父类();--->java中不允许

  3. 如果要实现向下转型,需要以1为基础;--->子类 b=(子类)a;--->可能会发生数据缺失的问题。

 

泛型

什么是泛型

语法:

/*
 *类名<类型参数1,类型参数2,...,类型参数n>{}
 *例如:
 */
    public class Demo<T>{
        T attribute;
        T method(T t){}
    }
//注意:如果定义了泛型却不使用,Eclipse会发出警告

 

泛型的常规用法

  1. 继承泛型类和泛型接口

class ExtendClass<T>{
}   //----->继承泛型类

class SubClass<T> extends ExtendClass<T>{
}

class TestInterface<T>{
}   //----->继承泛型接口

class SubClass2<T> implements TestInterface<T>{
}

继承泛型的四种情况:

  1. 全部继承:

父类      abstract class Father<T1,T2>{}
全部继承    class Child<T1,T2,T3> extends Father<T1,T2>{}

  2. 部分继承:

class Child<T1,A,B> extends Father<T1,String>{}

  3. 实现父类泛型:

class Child<A,B> extends Father<Integer,String>{}
    //当子类去继承已经实现的父类泛型时,因为父类已经实现,所以子类根本没有继承父类的类型,即使子类有声明的泛型时,也是子类所独有的类型。

  4. 不实现父类泛型

class Child extends Father{}
//注意:    父类的所有类型的成员都被默认成为Object类型。

泛型的高级用法

1.限制泛型的类型

语法:A<T extends anyClass>a;--->泛型必须是anyClass的子类

2.泛型通配符:限制泛型类型,并可以限制泛型对象的使用

语法:
A<?>a;
A<? extends anyClass>a;--->泛型必须是anyClass的子类,且此对象不能做增加和改写的操作
A<? super anyClass>a;--->泛型必须是anyClass的父类

 

 

 

 

 

 

 

 

 

枚举类型与泛型

原文:https://www.cnblogs.com/Aimblogs/p/12656628.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!