泛型
泛型类:
定义:类名后<变量> 如:class A<E> {使用E完成类的定义}
使用:创建对象时使用具体类型替换E
举例:
//定义泛型类
public class ObjectTool<E> {
private E obj;
public E getObj() {
return obj;
}
public void setObj(E obj) {
this.obj = obj;
}
}
//使用测试
public class MyTest {
public static void main(String[] args) {
ObjectTool<String> tool = new ObjectTool<String>();
tool.setObj("刘亦菲");
System.out.println(tool.getObj());
}
}
泛型方法:
定义:方法返回值前<变量> 如:public <T> void method(){使用T}
使用:调用方法时确定类型
举例:
//定义类,其中有一个泛型方法
public class ObjectTool {
public <T> void show(T t){
System.out.println(t);
}
}
//使用测试
public class MyTest {
public static void main(String[] args) {
ObjectTool tool = new ObjectTool();
tool.show(1);
tool.show("字符串");
}
}
泛型接口:
定义:接口后<变量> 如: interface B<T>{使用T完成接口定义}
使用:
public interface ObjectTool<E> {
void show(E e);
}
//1、定义类时确定类型
public class ObjectToolImpl<E> implements ObjectTool<E> {
@Override
public void show(E e) {
System.out.println(e);
}
}
public class MyTest {
public static void main(String[] args) {
ObjectToolImpl<String> tool = new ObjectToolImpl<String>();
tool.show("字符串");
}
}
//2、始终不确定类型,直到创建对象时确定类型
public class ObjectToolImpl implements ObjectTool<Integer> {
@Override
public void show(Integer e) {
System.out.println(e);
}
}
public class MyTest {
public static void main(String[] args) {
ObjectToolImpl tool = new ObjectToolImpl();
tool.show(1);
}
}
泛型通配符:
<?> 表示任意泛型
使用举例:
ArrayList<?> list1 = new ArrayList<Animal>();
ArrayList<?> list2 = new ArrayList<Dog>();
ArrayList<?> list3 = new ArrayList<Cat>();
<? extends E> 表示泛型是E及其子类
ArrayList<? extends Animal> list1 = new ArrayList<Animal>();
ArrayList<? extends Animal> list2 = new ArrayList<Dog>();
ArrayList<? extends Animal> list3 = new ArrayList<Cat>();
<? super E> 表示泛型是E及其父类
ArrayList<? super Cat> list1 = new ArrayList<Animal>();
ArrayList<? super Dog> list2 = new ArrayList<Dog>();
ArrayList<? super Cat> list3 = new ArrayList<Cat>();
001-SE-0005-泛型
最新推荐文章于 2022-09-05 21:34:56 发布