Java 基础(六) 集合 之二泛型 枚举类型 1. 泛型
对于一个 Point 类,为了类的可扩展性,其内构造如下:
- Class Point {
- Object x;
- Object y;
- }
这样,x 和 y,既可以赋值为 int 类型、long 类型,也可以赋值为 float 和 double 类型。
但于此同时,也存在着一些列的问题:
赋值的时候,需要强制类型转换; 由于使用 Object,需要强制类型转换,强制类型转换不安全。
如果能够传入一个参数,类中的参数类型根据这个参数的类型。根据实参就能确定这个形参的类型,就可以解决这个问题。由此,范型的概念应运而生。
范型可以解决如下的问题:
范型可以使类中的属性的类型由外部决定; 不需要强制类型转换; 泛型可以在编译期间进行类型检查; 提供了类型安全的操作。
编译器的泛型兼容性检查:
泛型和原始类型的兼容性
- 1.原始类型可以引用一个泛型类型List list = new ArrayList();
- 2.泛型类型可以引用一个原始类型的对象List list = new ArrayList();
类型参数不同的泛型类型不能相互引用,不考虑参数类型间的兼容性
- List
参考例子: GenericTest.java Point2.java PointTest.java
在泛型的对象中,符号
- ?和的区别是什么?有哪些区别?
- 2. 枚举类型
- 2.1 概要
- JDK1.5增添了枚举类型,可以使用enume来进行定义。
- public enum Gender {
- MALE,
- FEMAILE;
- } // 其中每一个类型都是该枚举类型的一个实例
- 使用
- Gender g = Gender.MALE;
- s遍历foreach(Gender s: Gender.values())
- Enum类和Enum关键字的区别:
- 使用enum关键字定义枚举类型,实际上相当于定义了一个类,此类继承了java.lang.Enum; 每一个枚举值都是枚举类型的实例,它们被预设为了public static final;
- Enum类只有一个受保护的构造方法:
- protected Enum(String name,int ordinal)ordinal 相当于元素的编号。每一个枚举元素在定义后,就会自动调用此方法,所有的编号采用自动编号的方式进行(编号从0开始)
- 使用valueof()的方法,可以找到枚举中的一个指定对象。
- public enum Color {
- RED,
- BLUE;
- } //获取枚举类型有两种方法//1. valueof()函数调用String name="RED";Color c1 = Color.valueof(name);//2. 直接调用Color c2=Color.RED;// 第一种方式是根据字符串的值来获取对象的,只要改变字符串的值,我们就可以随意的改变对象;// 第二种方式是写死了代码,不管如何变化都是取得的Color.RED对象,不会改变。
- 2.2 枚举的属性和方法
- 枚举内的属性和方法
- 枚举中可以拥有属性和方法,但是必须在元素声明之后,例如:
- public enum Color {
- RED,
- BLUE;
- private String name;
- public String getName() {
- return this.name;
- }
- }
- 枚举内的构造方法
- 枚举内的构造方法必须定义在元素列表之后; 枚举类型的构造方法只能是private的,不写默认也是private的; 元素若需要调用有参数的构造方法,须在构造的时候添加构造参数。
- 举例如下:
- public enum Color {
- RED("红色"),
- BLUE,
- BLACK;
- private String name;
- public String getName() {
- return this.name;
- }
- Color(String name) {
- this.name = name;
- } //有参构造函数 Color(){}//无参构造函数}
- 枚举的使用
- //拿到Color中的三个固定对象的其中一个 Color c = Color.RED; //拿到RED对象中的name属性的值 //这个值打印出来会是 "红色" //因为是RED这个对象才创建的时候 //通过一个参数的构造器传给属性name的 //在枚举类型中声明元素列表其实就是 //在创建这个枚举类型的固定对象 String name = c.getName();
- 2.3 枚举的接口和抽象方法
- 枚举实现接口
- 和类中一样,在枚举类中统一实现接口内容; 各个枚举类型分别实现接口内容。
- 第一种方式
- public enum Color implements Sofa {
- RED,
- BLUE;
- privat String name;
- public void sit { //实现接口内容 }}
- 第二种方式
- //每一个枚举元素对象中单独实现这个接口中的抽象方法 将来每个枚举元素对象调用到的就是自己独立实现的这个sit方法public enum Color implements Sofa{ RED{ public void sit(){ } }, BLUE{ public void sit(){ } }; privat String name; }
- 枚举中的抽象方法
- 在一个枚举类型中,可以定义多个抽象方法,但是每个枚举元素都必须实现这个抽象方法。
- public enum Color {
- RED {
- public String getInfo() {
- return "RED";
- }
- },
- BLUE {
- public String getInfo() {
- return "BLUE";
- }
- };
- public abstract String getInfo();
- }
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/02-23/17439609.html