自定义和使用含有泛型的类:
public class Generic<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } }
public static void main(String[] args) { Generic<String> generic=new Generic<>(); generic.setName("Sam"); System.out.println(generic.getName()); Generic<Integer> generic1=new Generic<>(); generic1.setName(1); System.out.println(generic1.getName()); }
自定义含有泛型的方法。
格式:
修饰符 <泛型> 返回值类型 方法名 (参数列表【泛型】){方法体}
public class GenericMethod { public <T> void show(T t){ System.out.println(t); } //静态方法 public static <T> void staticMethod(T t){ System.out.println(t); } }
public static void main(String[] args) { GenericMethod genericMethod=new GenericMethod(); genericMethod.show("Sam"); genericMethod.show(1); genericMethod.show(true); GenericMethod.staticMethod("静态方法"); }
自定义和使用含有泛型的接口:
泛型的通配符:
?:代表任意的数据类型。
使用方式:
不能
public static void main(String[] args) { ArrayList<String> string=new ArrayList<>(); string.add("abc"); string.add("edf"); ArrayList<Integer> integers=new ArrayList<>(); integers.add(123); integers.add(456); show(string); show(integers); } //想让一个方法能遍历上面两个集合。 public static void show(ArrayList<?> list){ Iterator<?> iterator= list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } }
受限泛型
泛型的上限限定: ? extends E 代表使用的泛型只能是E类型的子类/本身
泛型的下限限定: ?super E 代表使用的泛型只能是E类型的父类/本身