一、THJ 15.2简单泛形
**
* Created by Jon on 2016/5/17.
* 15.2简单泛型
* Holder2先后存储了三种不同类型的对象
*/
class Holder2 {
private Object a;
public Holder2(Object a) {
this.a = a;
}
public Object get() {
return a;
}
public void set(Object a) {
this.a = a;
}
public static void main(String[] args) {
Holder2 h2 = new Holder2(new Automobile());
Automobile a = (Automobile) h2.get();
h2.set("Not an Automobile");
String s = (String) h2.get();
h2.set(1); //Autoboxes to Integer
Integer x = (Integer) h2.get();
}
}
与其使用Object,我们可以先不指定类型,而是稍后决定具体使用什么类型,要达到这个目的我们就要使用泛型。
public class Holder3<T> {
private T a;
public Holder3(T a) {
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
public static void main(String[] args) {
Holder3<String> h3 = new Holder3<>("我是泛型");
h3.setA("你好");
System.out.println(h3.getA());
Holder3<Integer> hh3 = new Holder3<>(1);
System.out.println(hh3.getA());
}
}
需要使用的类型参数,用 "< >" ,放在类名的后面,然后在使用这个类的时候,再用实际的类型替换此类型参数,上面的例子T就是类型参数。
二、THJ 625 :末端哨兵
三、泛形方法
泛型方法和是否泛型类,没有关系,定义泛型方法,只需要将泛型参数置于返回值之前
public <A, B> void f(A a, B b, Double c) {
System.out.println(a.getClass().getName() + " "
+ b.getClass().getName() + " " + c.getClass().getName());
}
四、通配符理解
1、参数是可以传递 哪些不可以