通过学习本篇文章可以掌握如下知识
1、枚举
2、泛型
枚举是一种特殊类
枚举类的格式:
为什么说枚举是一个特殊类,定义一个简单的枚举如下:
public enum A {
// 注意:枚举类的第一行必须罗列枚举对象名称
X,Y,Z;
// 其他行可以写类相关的数据
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
将其编译成class文件后,使用IDEA打开,结果如下:可以看出枚举类A有私有构造器。
代码验证
public class Test {
public static void main(String[] args) {
A a1 = A.X;
System.out.println(a1.name()); // X
// 枚举类特供的额外API
A[] a = A.values();
A z = A.valueOf("Z");
System.out.println(z.name()); // Z
System.out.println(z.ordinal()); // 2
}
}
定义类、接口、方法时,同时声明了一个或者多个类型变量(如:) ,称为泛型类、泛型接口、泛型方法,它们统称为泛型。
例如ArrayList
public class Test {
public static void main(String[] args) {
// 泛型用来确定数组中参数内容。
ArrayList<String> list = new ArrayList<>();
list.add("java1");
list.add("java2");
list.add("java3");
list.forEach(System.out::println);
、
// 不仅仅可以装入String,也可以装入Integer,这里就体现出了“泛”的泛化含义。
ArrayList<Integer> list2 = new ArrayList<>();
list2.add(2);
list2.add(3);
list2.add(4);
list2.forEach(System.out::println);
}
}
作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。
泛型的本质: 把具体的数据类型作为参数传给类型变量。
泛型类的定义:
代码演示:这里仅仅是说明泛型类的定义,不用关注具体的方法实现。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
其次注意extend的用法:定义一个泛型类MyClass
表明MyClass3中只能接受Animal及其子类,如果是其他类型就会报错。
泛型接口与泛型类比较类似,相对简单。
代码:定义了泛型接口后,Student类实现泛型后,就可以处理Student类型数据;Teacher类实现泛型后,就可以处理Teacher类型数据。
public interface Data<T> {
void add(T t);
}
public class Student implements Data<Student>{
@Override
public void add(Student student) {
}
}
public class Teacher implements Data<Teacher>{
@Override
public void add(Teacher teacher) {
}
}
泛型方法的定义:
代码验证
public class Test {
public static void main(String[] args) {
String t = test("3");
System.out.println(t);
}
// 第一个 表示泛型标识
// 第二个T 表示返回值,
// 第三个T表示输入参数的类型
public static T test(T t){
return t;
}
}
此外 ”?“表示:在使用泛型的时候可以代表一切类型。
之前我们讲过extends ,因此可以使用 extends Car> 代表只能接受 Car于Car的子类。
此外还有 super Car> 表示Car或者Car的父类。使用案例:
注意:泛型仅仅支持引用数据类型,不支持基本数据类型。
总结:所谓泛型就是,泛化。定义泛型变量E,不定义具体的数据类型。