泛型的使用
定义一个泛型接口:
public interface GenericInterface <E>{
public E method1();
public void method2(E e);
}
实现该接口的方法如下:
public class GenericInterfaceImpl implements GenericInterface<Integer> {
@Override
public Integer method1() {
return null;
}
@Override
public void method2(Integer integer) {
System.out.println(integer);
}
}
该类的调用、泛型方法的定义方法如下:
public class Demo01 {
public static <E> void method1(E e) {
System.out.println(e);
}
public static <E> E method2(E e) {
return e;
}D
public static <E> E[] method3(E e) {
E[] ar = (E[]) new Object[128]; //注意数组的定义方法
return ar;
}
public static void main(String[] args) {
GenericInterfaceImpl gil = new GenericInterfaceImpl();
gil.method1();
gil.method2(100);
}
}
泛型的通配符
- ?代表任意的数据类型
- 不能创建对象使用
- 只能作为方法的参数使用
通配符的使用示例如下:
public class Demo02 {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.addAll(Arrays.asList(1,2,3));
List<String> list2 = new ArrayList<>();
list2.addAll(Arrays.asList("abc","def"));
printArray(list1);
printArray(list2);
}
public static void printArray(List<?> list){ //两种方法输出元素
for (Object o : list) {
System.out.println(o);
}
Iterator<?> it = list.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.println(o);
}
}
}
受限的泛型
- ? extends E代表使用的类型只能是E的子类/本身
- ? super E代表使用的类型只能是E的父类/本身
public class Demo03Generic {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.addAll(Arrays.asList(1,2,3,4,5));
getEle(list);
}
public static void getEle(Collection<? extends Integer> list){
Iterator<?> it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
}
}