import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
/**
* @author
* @version 1.0
*
* */
public class GenericTest{
public static void main(String[] arg){
Map<String ,Integer> map = new HashMap<String,Integer>();
map.put("aa",11);
map.put("bb",22);
map.put("cc",33);
Collection<Integer> cols = map.values();
System.out.println("using values to print");
printMapUsingGeneric(cols);
Set<String> keySet = map.keySet();
printMapUsingGeneric(keySet);
printMap(map.entrySet());
add(3,5); //3和5被自动装箱为Integer类型
add(3,3.4f); //Integer和Float型的交集是Number
add(3,"abv"); //Integer和String类型的交集是Object
String[] a = new String[]{"ad","adb","dba","dd"};
System.out.println("before swap");
printArray(a);
System.out.println();
System.out.println("after swap");
swap(a,2,1);
printArray(a);
// swap(new int[]{12,4,5,56},3,1);//不是引用类型就会报错,因为基本类型数组本身就是一个Object
}
/**
* 使用泛型打印任意类型的数组
* */
public static <T> void printArray(T[] t){
for(int i=0 ; i<t.length;i++){
System.out.print(t[i]+" ");
}
}
/**
* 使用泛型来打印根据map的entrySet
* */
public static <K,V> void printMap(Set<Entry<K ,V>> entry){
System.out.println("Using entry print");
for(Map.Entry<K, V> subEntry :entry){
System.out.println(subEntry.getKey()+":"+subEntry.getValue());
}
}
/**
* 使用泛型来打印根据map的keySet和value
* */
public static <T> void printMapUsingGeneric(Collection<T> set){
System.out.println("Using Generic print");
for(T subSet :set){
System.out.print(subSet+" ");
}
System.out.println();
}
/**
* 验证自动装箱的功能
* */
public static <T> T add(T a , T b){
return null;
}
public static <T> void swap(T[] a ,int i ,int j){
T tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
转载于:https://blog.51cto.com/crelaber/1051053