自定义泛型

自定义泛型

class 类名<T,R>{}

  1. 普通成员可以使用泛型
  2. 使用泛型的数组,不能进行初始化
  3. 静态方法中不能使用类的泛型
  4. 泛型类的类型,是在创建对象时确定的(因为在创建对象时,需要指定确定类型)
  5. 如果在创建对象时,没有指定类型则默认为Object
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
public static void main(String[] args) {

}
}
class Tiger<T,M,R>{
T[] ts;
//不能使用静态static来定义泛型,会进行报错,static方法是在类加载的时候定义的,但是泛型是在初始化对象的时候进行的
/*public static void f(M c){

}*/

}

自定义泛型方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Test {
public static void main(String[] args) {
Tiger tiger=new Tiger();
//这个时候默认的就是String与int
tiger.fly("haha",1);
//这个时候默认的就是int与int
tiger.fly(1,1);
}
}
class Tiger<K>{
public void run(){

}
//泛型方法被调用的时候必须指定泛型的类型
public <T,R> void fly(T t,R r){

}
//这个并不是泛型方法
public void f2(K k){

}

}

注意泛型不具备继承性,下面的这一段语句就是错误的。

1
ArrayList<Object> arrayList=new ArrayList<String>();
: 支持A类以及A的子类,规定了泛型的上线 : 支持A类以及A的父类,规定了泛型的下线