您的位置:首页 > 职场人生

loading黑马程序员之高级编程:泛型(4-3)

2014-01-10 11:43 375 查看
-------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培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息