泛型:”参数化类型“;类似于方法中的形参。
泛型类:
1 public static void main(String[] args) { 2 //传入泛型类型 3 Data<String> data = new Data<String>("N","m"); 4 5 System.out.println(data.getBo()); 6 7 Data<Integer> data2 = new Data<Integer>(10,20); 8 9 System.out.println(data2.getMo()); 10 11 //true;说明这两个对象终究还是同一个类型。泛型是只作用在编译期。 12 System.out.println(data2.getClass() == data.getClass()); 13 } 14 } 15 //这里的泛型T有调用方来决定类型; 16 class Data<T>{ 17 private T bo; 18 private T mo; 19 public Data(T bo,T mo) { 20 super(); 21 this.bo = bo; 22 this.mo = mo; 23 } 24 public T getBo() { 25 return bo; 26 } 27 public void setBo(T bo) { 28 this.bo = bo; 29 } 30 public T getMo() { 31 return mo; 32 } 33 public void setMo(T mo) { 34 this.mo = mo; 35 } 36 }
泛型方法:
1 public static void main(String[] args){ 2 3 //代码更灵活使用调用了;数据类型的限制被放大 4 Pontprient("Java",100); 5 6 } 7 private static <V,K> void Pontprient(V m,K n) { 8 9 V m1 = m; 10 K n1 = n; 11 System.out.println(m1+","+n1); 12 13 }
泛型接口/类:
public class FanTypeInterfaceDemo { public static void main(String[] args) { List<bigPerson> list = new ArrayList<bigPerson>(); list.add(new bigPerson("大爷")); list.add(new bigPerson("二大爷")); list.add(new bigPerson("三阿爷")); list.add(new bigPerson("四阿爷")); List<kids> listkid = new ArrayList<kids>(); listkid.add(new kids("大宝")); listkid.add(new kids("小宝")); listkid.add(new kids("三宝")); sleepMoth(list); System.out.println("-------优雅的分割线-------"); sleepMoth(listkid); } // 表示List中存储的是Persons对象或者Persons的子类对象 // ? extends 类/接口 ---泛型的继承----表示可以使用的是这个类/子类/子接口对象 // 确定了泛型的上限 public static void sleepMoth(List<? extends Persons> person){ for (Persons persons : person) { // 除了null以外不能存放其他的元素 persons.sleep(); } } // 表示可以传入String及其父类或者父接口的对象 // ? super 类/接口 ---泛型的继承---表示可以使用这个类/父类/父接口的对象 // 确定了泛型的下限 public static void sleepMoth2(List<? super String> person) { // 可以向list中添加元素吗?---不可以---除了null以外,其余不行 } } //定义接口和实现接口; interface Persons{ void sleep(); } class bigPerson implements Persons{ private String name; public bigPerson(String name) { super(); this.name = name; } @Override public void sleep() { System.out.println(name+"睡在沙发上..."); } } class kids implements Persons{ private String name; public kids(String name) { super(); this.name = name; } @Override public void sleep() { System.out.println(name+"睡在婴儿车上...."); } }