编写范型类比普通的类要麻烦,而且很少编写范型类。
1.编写一个范型类:
- 按照某种类型(例如String)编写类
- 标记所有的特定类型例如String
- 把特定类型替换为T,并申明
Pair
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);
}
}
2.范型类包含静态方法
注意:
范型类型
- 编译错误
- 编译器无法在静态字段或静态方法中使用范型类型
- 静态方法可以单独改写为范型方法
网上有种解决方法,在static后面加上,就解决了报错问题。但此处static方法中的 和上面Pair类中的 不一样,为了避免混淆,应该将 替换为 。
public static <T> Pair<T> create(T first,T last){
return new Pair<T>(first,last);
}
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;
}
static <K> Pair<K> create(K first,K last){
return new Pair<K>(first,last);
}
}
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);
}
}
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);
}
}
4.总结:
- 编写范型时,需要定义范型类型
* public class Pair{...} - 静态方法不能引用范型类型
,必须定义其他类型 来实现范型
* public staticPair create(K first, K last){...}
范型可以同时定义多种类型<T,K>
public class Pair<T,K>{...}