廖雪峰Java4反射与泛型-3范型-3编写泛型

时间:2024-11-24 08:37:02

编写泛型类比普通的类要麻烦,而且很少编写泛型类。

1.编写一个泛型类:

  • 按照某种类型(例如String)编写类
  • 标记所有的特定类型例如String
  • 把特定类型替换为T,并申明

    廖雪峰Java4反射与泛型-3范型-3编写泛型

    Pair.java
package com.testArray;

public class Pair<T> {
private T fisrt;
private T last;
public Pair(T first,T last){
this.fisrt=first;
this.last=last;
}
public T getFisrt(){
return fisrt;
}
public T getLast(){
return last;
}
}

Main.java

package com.testArray;

import java.util.ArrayList;

public class Main {
public static void main(String[] args){
Pair<String> p = new Pair<String>("小明", "小红");
String first = p.getFisrt();
String last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}

廖雪峰Java4反射与泛型-3范型-3编写泛型
## 2.泛型类包含静态方法
注意:
泛型类型不能用于静态方法:
* 编译错误
* 编译器无法在静态字段或静态方法中使用泛型类型

廖雪峰Java4反射与泛型-3范型-3编写泛型
* 静态方法可以单独改写为泛型方法
网上有种解决方法,在static后面加上,就解决了报错问题。但此处static方法中的和上面Pair类中的不一样,为了避免混淆,应该将替换为。
```#java
public static Pair create(T first,T last){
return new Pair(first,last);
}
```
```#java
package com.testArray;

public class Pair {

private T fisrt;

private T last;

public Pair(T first,T last){

this.fisrt=first;

this.last=last;

}

public T getFisrt(){

return fisrt;

}

public T getLast(){

return last;

}

static Pair create(K first,K last){

return new Pair(first,last);

}

}

```#java
package com.testArray; public class Main {
public static void main(String[] args){
Pair<String> p = Pair.create("小明", "小红");
String first = p.getFisrt();
String last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}

廖雪峰Java4反射与泛型-3范型-3编写泛型

3.泛型可以定义多种类型

Pair.java

package com.testArray;

public class Pair<T,K> {
private T fisrt;
private K last;
public Pair(T first,K last){
this.fisrt=first;
this.last=last;
}
public T getFisrt(){
return fisrt;
}
public K getLast(){
return last;
}
}

Main.java

package com.testArray;

public class Main {
public static void main(String[] args){
Pair<String,Integer> p = new Pair<String,Integer>("小明", 12);
String first = p.getFisrt();
Integer last = p.getLast();
System.out.println(first+"\t"+last);
System.out.println(p.getClass() == Pair.class);
}
}

廖雪峰Java4反射与泛型-3范型-3编写泛型

4.总结:

  • 编写泛型时,需要定义泛型类型

    * public class Pair{...}
  • 静态方法不能引用泛型类型,必须定义其他类型来实现范型

    * public static Pair create(K first, K last){...}
  • 泛型可以同时定义多种类型<T,K>

    * public class Pair<T,K>{...}