我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建。 self-transcendence
第17章 枚举类型与泛型
17.1 枚举类型
使用枚举类型可以取代以往定义常量的方式,并且还有程序在编译时进行检查的功能。
17.1.1 使用枚举类型设置常量
以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为在接口中定义常量时,该常量的修饰符为final与static。
使用枚举类型定义常量的语法如下:
Public enum Constants{
Constants_A,
Constants_B,
Constants_C
}
enum是定义枚举类的关键字。程序中使用常量,用Constants.Constants_A来引用。
17.1.2 深入了解枚举类型
每一个枚举类都可以看做是一个类,当定义一个枚举类型时,每一个成员都可以看做一个枚举实例,这些成员都默认被final public static修饰,所以直接使用枚举类型名称嗲用枚举类型成员就行。
方法名称 | 具体含义 | 使用方法 |
values() | 该方法可以将枚举类型成员以数组的形式返回 | 枚举名.values |
valueOf() | 该方法可以实现将普通字符串转换为枚举实例 | 枚举名.valueOf(“abc”) |
compareTo() | 该方法用于比较两个枚举对象在定义时的顺序 | 枚举名.compareTo |
ordinal() | 该方法用于得到枚举成员的位置索引 | 枚举名.ordinal |
调用compareTo方法返回的结果,正值代表方法中参数在调用该方法的枚举对象位置之前;0代表两个互相比较的枚举成员的位置相同;负值代表方法中参数在调用该方法的枚举对象位置之后。
-------------------------------------------------------------------
17.2 泛型
泛型实质上就是使程序员定义安全的类型。在没有出现泛型之前,java也提供了对Object的引用“任意化”操作,这种“任意化”操作就是对Object引用进行向下转型及向上转型操作,但某些强制类型转换的错误也许不会被编译器捕捉,而在运行后出现异常,可见强制类型转换存在安全隐患,所以提供了泛型机制。
Object类为最上层的父类,很多程序员为了使程序更为通用,设计程序时通常使传入的值与返回的值都以Object类型为主。当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则就会发生异常。语法是 类名<T>
在定义泛型时,还可以声明多个类型:
MutiOverClass<T1,T2>
MutiOverClass:泛型类名称
这样实例化指定类型的对象时就可以指定多个类型:
MutiOverClass<Boolean,Float> aaa=new MutiOverClass<Boolean,Float>();
定义泛型类时也可以声明数组类型:
Public T[] getT(){};
Javaq中已经被泛型化的集合框架:
ArrayList<E> HashMap<K,V> HashSet<E> Vector<E>
泛型的高级用法包括限制泛型可用类型和使用类型通配符等。
默认可以使用任何类型来实例化一个泛型类对象,但java中也对泛型类实例的类型做了限制,语法是:class 类名称<T extends anyClass> ,anyClass指某个接口或类。
使用泛型限制后,泛型类的类型必须实现或继承了anyClass这个接口或类。无论anyClass是接口还是类,在进行泛型限制时,都必须使用extends关键字。
类型通配符,主要作用是创建一个泛型对象时,限制这个泛型类的类型实现,或者继承某个接口或类的子类。要声明这样一个对象可以使用“?”通配符来表示,同时使用extends关键字来对泛型加以限制。语法是:泛型类名称<? extends List> a=null;
其中,<? exteand List>表示类型未知,当需要使用该泛型对象时,可以单独实例化。
泛型类和泛型接口可以被继承和实现。