刚刚开始看泛型,泛型是一个容器,既然是容器,那么里面就能放任何东西,
就是任何对象。
创建一个泛型类很简单,像下面这样就是创建了一个简单的泛型类型
简单泛型
public class Holder<T> {
private T a;
public Holder(T a) {
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
public static void main(String[] args) {
Holder<Automobile> Holder =
new Holder<Automobile>(new Automobile());
Automobile automobile = Holder.getA();
automobile.say();
}
}
class Automobile {
public void say(){
System.out.println("111");
}
}
Holder<Automobile> Holder = new Holder<Automobile>(new Automobile());
“<>”里面可以是任意类型
多个泛型持有者
public class TestGenericFoo {
public static void main(String[] args) {
//可以分别以 String 和 Integer 设置 T1, T2 的真实类型
GenericFoo<String, Integer> foo =
new GenericFoo<String, Integer>();
foo.setFoo1("jack");
foo.setFoo2(99);
}
class GenericFoo<T1, T2> {
private T1 foo1;
private T2 foo2;
public T1 getFoo1() {
return foo1;
}
public void setFoo1(T1 foo1) {
this.foo1 = foo1;
}
public T2 getFoo2() {
return foo2;
}
public void setFoo2(T2 foo2) {
this.foo2 = foo2;
}
}
也可以用于声明数组
public class TestGenericFoo {
public static void main(String[] args) {
//也可以用于声明数组
String [] strArray = {"one", "two", "three"};
GenericFooArray<String> fooArray =
new GenericFooArray<String>();
fooArray.setFooArray(strArray);
// System.out.println(fooArray.getFooArray()[0]);
}
//GenericFoo 数组
class GenericFooArray<T> {
private T[] fooArray;
public T[] getFooArray() {
return fooArray;
}
public void setFooArray(T[] fooArray) {
this.fooArray = fooArray;
}
}
泛型限制可用类型
public class TestGenericFoo {
public static void main(String[] args) {
//泛型限制可用类型,比如限制只有继承了List才可使用
ArrayList<String> arrayList =
new ArrayList<String>();
arrayList.add("1");
arrayList.add("2");
//如果此处不是继承List的类会编译出错
GenericFooList<ArrayList> fooList =
new GenericFooList<ArrayList>();
fooList.setFooList(arrayList);
}
}
//泛型限制可用类型,比如限制只有继承了List才可使用
class GenericFooList<T extends List> {
/*GenericFooList<T extends List<String>>
这么定义的话 GenericFooList 就只能用ArrayList<String>实例化
GenericFooList<ArrayList<String>> fooList =
new GenericFooList<ArrayList<String>>();
用ArrayList<Integer> 会编译出错
GenericFooList<ArrayList<Integer>> fooList =
new GenericFooList<ArrayList<Integer>>();
*/
private T fooList;
public T getFooList() {
return fooList;
}
public void setFooList(T fooList) {
this.fooList = fooList;
}
}