1.泛型類
1.1普通泛型
輸出結果:
1.2 K/V泛型
/**
* Created by Administrator on 14-3-30.
*/
class TestKV<K,V>{
private Map<K,V> map=new HashMap<K, V>();
public void put(K k, V v) {
map.put(k,v);
}
public V get(K k) {
return map.get(k);
}
}
public class TestFour{
public static void main(String[] args) {
TestKV<String,String> t = new TestKV<String, String>();
t.put("name","jianing");
System.out.println(t.get("name"));
TestKV<String,Integer> t2 = new TestKV<String, Integer>();
t2.put("age",24);
System.out.println(t2.get("age"));
}
}
輸出結果:
2.泛型接口
輸出結果:
3.泛型方法
/**
* 泛型方法類
*/
class TestMethod{
/**
* 泛型方法
*/
public <T>T getValue(Object s,Class<T> clazz) {
System.out.println(clazz.getName());
T t =null;
if(clazz.getName().equals("java.lang.Integer")){
Double d = Double.parseDouble(s.toString());
int i =d.intValue();
t=(T)new Integer(i);
}
if(clazz.getName().equals("java.lang.Double")){
t=(T)new Double(s.toString());
}
return t;
}
}
/**
* 泛型方法測試類
*/
public class TestThree {
public static void main(String[] args) {
TestMethod t = new TestMethod();
int i =t.getValue("30.0011",Integer.class);
System.out.println(i);
double d =t.getValue("40.0022",Double.class);
System.out.println(d);
}
}
輸出結果:
4.限制泛型
在上面的例子中,沒有限制class Test<T>類型持有者T的范圍,默認限定類型相當于Object。比如我們要限制T為數字接口類型。只需要這么做:class Test<T extends Number>,這樣類中的泛型T只能是Number接口的實現類,傳入非Number接口編譯會出錯。
5.通配泛型
for (Map.Entry<String,Class<? extends Number>> entry : map.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
}
}
}
輸出結果:
簡單的例子:針對1.1的例子
輸出結果:
6.補充
在泛型中,可能會遇到<T><E>等,T和E分別是Type和Element的首字母。E一般用來表示集合類型中的元素的類型,例如List接口的定義,public interface List<E> extends Collection<E>。這只是一種命名習慣,兩者沒有本質區別。
新聞熱點
疑難解答