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

来源:互联网 发布:关闭iis 80端口 编辑:程序博客网 时间:2024/05/21 22:44

-------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;}@Overridepublic 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培训、期待与您交流! ----------







0 0
原创粉丝点击