自定义类使用泛型and方法使用泛型

时间:2023-03-08 16:08:46
自定义类使用泛型and方法使用泛型

使用泛型的自定义类,泛型可以使用任意的数据类型,在创建对象的时候确定是什么数据类型,创建对象的时候不使用泛型,那就默认是Object类型

格式:

使用泛型的自定义类

package cn.zhuobo.day10.aboutGeneric;

public class ClassGeneric<E> {
private E name; public ClassGeneric() {
} public ClassGeneric(E name) {
this.name = name;
} public E getName() {
return name;
} public void setName(E name) {
this.name = name;
}
}

创建对象

package cn.zhuobo.day10.aboutGeneric;

public class MainGeneric {
public static void main(String[] args) {
ClassGeneric<String> a = new ClassGeneric<>();
ClassGeneric<Integer> b = new ClassGeneric<>();
}
}

含有泛型的方法:

格式:泛型定义在方法的返回值类型和权限修饰符之间

修饰符 <泛型> 返回值类型 方法名(使用泛型的参数列表) {

}

含有泛型的方法,在调用的时候确定数据类型,传递的参数是什么类型,泛型就是什么类型

public <M> void method(M m) {
System.out.println(m);
} public static <M> void method11(M m, int a) {
if(a > 0) System.out.println(m);
}// 静态方法是类共有的,不用创建对象(虽然说也可以),直接类名调用静态方法

含有泛型的接口

泛型通配符

泛型通配符:?

代表任意的数据类型

不能创建 对象使用,只能作为方法的参数使用

比如我有两个ArrayList集合,一个是Integer,另一个是String,但是我希望这两个集合都可以被同一个方法遍历

public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
method1(list1);
method1(list2);
} // method1的定义和实现如下:
public static void method1(ArrayList<?> list) {
Iterator it = list.iterator();
while(it.hasNext()) {
Object next = it.next();// 返回的是Object类型,因为只有Object才能接收任意的类型
System.out.println(next);
}
}

泛型通配符的限定:

上限限定:<? extends E>: 使用的泛型必须是E或者E的子类
下限限定:<? super E> :使用的泛型必须是E或者E的父类