-------android培训 、java培训、期待与您交流! ----------
Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)
package com.heima.generic;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
*
*
*/
public class Demo2 {
public static void main(String[] args) {
Person p1 = new Person("yang",22);
Person p2 = new Person("wang",21);
Map<String, Person> map = new HashMap<String, Person>();
map.put("001", p1);
map.put("002", p2);
System.out.println("-----通过键集遍历map-----");
Set<String> keySet = map.keySet();
for (Iterator<String> iterator = keySet.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string+">"+map.get(string));
}
System.out.println("-----通过Map.Entry实例对象遍历-----");
Set<Map.Entry<String, Person>> entrySet = map.entrySet();
for (Map.Entry<String, Person> entry : entrySet) {
System.out.println(entry.getKey()+">"+entry.getValue());
}
}
}
class Person{
private String name;
private int age;
public Person(){
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name+":"+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.heima.generic;
import java.util.Collection;
import java.util.Iterator;
public class Demo3 {
public static void main(String[] args) {
Object obj = "利用泛型进行类型转换";
System.out.println(convertObj(obj));
Integer[] arr = new Integer[3];
String a ="b";
int b =3;
fillArray(arr, a);
System.out.println(arr);
}
//返回值的前面创建一个泛型T,这个T就是参数的实际类型
public static <T>T convertObj(Object obj){
return (T)obj;
}
public static <T> void fillArray(T[] t,T obj){
for (int i = 0; i < t.length; i++) {
t[i] = obj;
}
}
public static void printCollection(Collection<? extends String> collection){
for (Iterator iterator = collection.iterator(); iterator.hasNext();) {
Object object = (Object) iterator.next();
System.out.println(object);
}
}
public static <T> void printCollection(Collection<T> collection,T obj){
//如果用Collection<? extends String> collection这种方法
//因为不知道?是什么类型,所以不能随便添加元素
//但是,Collection<T> collection,T obj可以
collection.add(obj);
}
}
package com.heima.generic;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Vector;
/**
*通过反射获取泛型的实际类型参数
*/
public class Demo4 {
public static void main(String[] args)throws Exception {
//因为编译过后,参数类型就消失了
//Vector<String> vector = new Vector<String>();
//但是方法可以获取自己的参数列表,泛型类型也可以获取到哦
Method method = Demo4.class.getMethod("applyVector", Vector.class);
Type[] types = method.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType) types[0];
System.out.println(pType.getRawType());
System.out.println(pType.getActualTypeArguments()[0]);
}
public static void applyVector(Vector<String> v){
}
}
------- android培训 、 java培训 、期待与您交流! ----------