JDK8之后推出了自动类型推断,又称为钻石表达式
List<Animal> myList = new ArrayList<>(); package collection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class GenericTest02 { public static void main(String[] args) { //ArrayList这里的类型会自动推断 List<Animal> myList = new ArrayList<>(); myList.add(new Animal()); myList.add(new Cat()); myList.add(new Bird()); //遍历 Iterator<Animal> it = myList.iterator(); while (it.hasNext()){ Animal a = it.next(); a.move(); } List<String> myList2 = new ArrayList<>(); myList2.add("123"); myList2.add("456"); myList2.add("789"); //myLIst2.add(123) 类型不匹配 Iterator<String> it2 = myList2.iterator(); while (it2.hasNext()){ //直接通过迭代器调用String类的subString方法 String str = it2.next().substring(1); System.out.println(str); } } } 自定义泛型就是在代码编写阶段使用自己的标识符单书名号里面只是标识符,随便写,Java源码中常出现的是E和T E 是 elements的缩写。 T 是 Type的缩写。 package collection; /* 自定义泛型可以吗 单书名号里面只是标识符,随便写,Java源码中常出现的是E和T E 是 elements T 是 Type */ public class GenericTest03 <asdfasdfasdf> { public void dosome(asdfasdfasdf o ){ System.out.println(o); } public static void main(String[] args) { //new 对象的时候指定了泛型是String类型 GenericTest03<String> gt = new GenericTest03<>(); //类型不匹配 //gt.dosome(100); gt.dosome("100"); //===================================================== GenericTest03<Integer> gt2 = new GenericTest03<>(); gt2.dosome(100); //===================================== MyIterator<String> mi = new MyIterator<>(); String s1 = mi.get(); MyIterator<Integer> mi2 = new MyIterator<>(); Integer i2 = mi2.get(); //不用泛型就是Object类型 GenericTest03 gt3 = new GenericTest03(); gt3.dosome(new Object()); } } class MyIterator<Y> { public Y get(){ return null; } }