Hello ! 我是小小。从一个啥也不会的Java小白,到Java大佬,就因为会了这一门杜门绝迹,泛型,成为令人仰慕的大佬,今天是本周的第六篇,主要内容是Java泛型
例如一段代码
//创建一个List集合
ArrayList al = new ArrayList();
al.add(123); //添加基本数据类型对象
al.add("123"); //添加String对象
al.add(new Person("123")); //添加自定义Person对象
在这段代码中,如果需要添加 string类型,需要改成如下方式
//创建一个List集合 并指定集合的对象类型
ArrayList al = new ArrayList();
al.add("123");
al.add("iamxiarui");
即,当指定了集合中的对象类型后,集合只能保存相关的类型,如果保存的类型和指定的类型不匹配,需要进行更改。
泛型的本质是参数化类型,即,数据类型被指定为一个参数,这种参数类型可以用在类,接口和方法的创建中,即,泛型类,泛型接口,泛型方法。
格式可以更改如下
//List集合中 指定元素类型是Map集合 ,Map集合中指定的key是String类型,value是Object类型
List
在代码编写过程中,使用泛型可以限定相关的类型,确定只有相关的类型才能使用相关的泛型。
在规定的集合中保存相应的类型,在编译期间可以检查到,减少在代码运行期间发生意外。
避免了代码在强制类型转换的时候,需要频繁的在前面加上括号,只需要直接使用泛型就包括的代码的类型。
public static void print(ArrayList> al){
Iterator> it = al.iterator();
}
该方法传入参数的时候,可以被任何类型所传入。这样非常的简洁,也同样非常的简单。
//表示可以该集合存入Person类 或者 Person 类的子类型
public static void print(ArrayList extends Person> al){
Iterator< extends Person> it = al.iterator();
}
//表示可以该集合存入Student类 或者 Student 类的父类型
public static void print(ArrayList super Student> al){
Iterator super Student> it = al.iterator();
}
// 自定义泛型:定义了Generic类的类型是Person对象
class Generic {
private Person p;
public Person getP() {
System.out.println(p);
return p;
}
public void setP(Person p) {
this.p = p;
}
// 自定义泛型:定义了Generic类的类型是Person对象
class Demo{
public void show(T t){
System.out.println(t);
}
public void show(Q q){
System.out.println(q);
}
}
// 类上已经定义了泛型
class GenericMethod {
// 方法上没有定义泛型 则根据类确定泛型
public void getB(B b) {
System.out.println("B — " + b);
}
// 方法上已经定义了泛型 根据方法泛型来
public void getC(C c) {
System.out.println("C — " + c);
}
// 静态方法 必须自定义方法泛型 不能根据类上的泛型
public static void getD(D d) {
System.out.println("D — " + d);
}
// 定义接口的泛型
interface Intet {
void show(T t);
}
// 类实现接口 并自定义泛型
class GenericInterface implements Intet {
public void show(T t) {
System.out.println("show — " + t);
}
}
我是小小,一枚小小的程序猿,我们下期再见~拜拜
小明菜市场
推荐阅读
● Spring Boot | 一个90后女孩的第一个 Spring Boot 应用
● 太好了 | 这篇写的太好了!Spring Boot + Redis 实现接口幂等性
● 挖矿事业开启!小小带你赚钱带你飞!
● 财政 | 十月,我的财政状况
● 调优 | 别再说你不会 JVM 性能监控和调优了
给我个好看再走好吗?