1-泛型入门
0
Word Count: 1.1k(words)
Read Count: 5(minutes)
一、泛型
what?
泛型是 ——–> 可以 接受 数据类型 的一种 数据类型 。
why?
how?
1.类的自定义泛型
2.接口的自定义类型
接口中有泛型时,
最好不要 class xxx implements Iusb{
}
这样写
而是
class xxx implements Iusb <Object,Object >{
}
二、注意的点
- 泛型 只能是 ==引用类型==。 —
- 不指定类型 ,默认类型 为 ==object==
- 使用泛型的数组不能初始化。
因为 new 的时候会为 数组分配内存空间,而 此刻不能确定其类型,就无法开空间。
- 静态成员(属性、方法、方法快)都不能使用 泛型,因为泛型只有在类被创建实例时才被指定 类型 ,而 静态成员在 ==类加载==时,就被初始化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| package com.hspedu.customgeneric; import java.util.Arrays;
@SuppressWarnings({"all"}) public class CustomGeneric_ { public static void main(String[] args) {
Tiger<Double,String,Integer> g = new Tiger<>("john"); g.setT(10.9);
System.out.println(g); Tiger g2 = new Tiger("john~~"); g2.setT("yy"); System.out.println("g2=" + g2); } }
class Tiger<T, R, M> { String name; R r; M m; T t;
T[] ts; public Tiger(String name) { this.name = name; } public Tiger(R r, M m, T t) { this.r = r; this.m = m; this.t = t; } public Tiger(String name, R r, M m, T t) { this.name = name; this.r = r; this.m = m; this.t = t; }
public String getName() { return name; } public void setName(String name) { this.name = name; } public R getR() { return r; } public void setR(R r) { this.r = r; } public M getM() { } public void setM(M m) { this.m = m; } public T getT() { return t; } public void setT(T t) { this.t = t; } @Override public String toString() { return "Tiger{" + "name='" + name + '\'' + ", r=" + r + ", m=" + m + ", t=" + t + ", ts=" + Arrays.toString(ts) + '}'; } }
|
2.
=# 三、通配符与继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| public class GenericExtends { public static void main(String[] args) { Object o = new String("xx");
List<Object> list1 = new ArrayList<>(); List<String> list2 = new ArrayList<>(); List<AA> list3 = new ArrayList<>(); List<BB> list4 = new ArrayList<>(); List<CC> list5 = new ArrayList<>();
printCollection1(list1); printCollection1(list2); 韩顺平循序渐进学 Java 零基础 第 737页 printCollection1(list3); printCollection1(list4); printCollection1(list5);
printCollection2(list3); printCollection2(list4); printCollection2(list5);
printCollection3(list1);
printCollection3(list3);
韩顺平循序渐进学 Java 零基础 第 738页 }
public static void printCollection2(List<? extends AA> c) { for (Object object : c) { System.out.println(object); } }
public static void printCollection1(List<?> c) { for (Object object : c) { System.out.println(object); } }
public static void printCollection3(List<? super AA> c) { for (Object object : c) { System.out.println(object); } } } 韩顺平循序渐进学 Java 零基础 第 739页 class AA { } class BB extends AA { } class CC extends BB { }
|