1:
package com.daxin.fanxing;import java.util.Arrays;public class ArrayDemo{ public T[] arr; public T[] createArray() { // 信息存在于编译器,即在编译期间知道齐是一个T类型的数组,但是运行期间就是object数组 return (T[]) new Object[10]; } public static void main(String[] args) { ArrayDemo arr = new ArrayDemo<>(); //运行时没有编译期间信息,因此相当于父类向子类转型报错、 //Integer[] ia = arr.createArray(); // Object [] objs= arr.createArray(); System.out.println(objs.getClass()); }}
2:
package com.daxin.fanxing.csdn;import java.lang.reflect.*;import java.util.Map;/** * * @author liuguangxin * */class Score { // 泛型类型参数类型 //之所以可以获取成员变量的泛型信息是因为成员变量的泛型信息存储在类的metadata中 private Mapscore;}public class Main { public static void main(String[] args) { System.out.println("================获取成员变量信息================="); Class cls = Score.class; try { // 2 获取Score的成员变量 Field field_score = cls.getDeclaredField("score"); // 3 获取普通类型参数 Class type_score = field_score.getType(); System.out.println(type_score.getName()); } catch (NoSuchFieldException e) { e.printStackTrace(); } System.out.println("==============获取成员变量的泛型信息==================="); cls = Score.class; try { // 2 获取Score的成员变量 Field field = cls.getDeclaredField("score"); // 3 获取成员变量的泛型类型 Type type = field.getGenericType(); // 4 强制转换为ParameterizedType if (type instanceof ParameterizedType) { ParameterizedType pType = (ParameterizedType) type; // 5 获取泛型类型参数 Type[] tArgs = pType.getActualTypeArguments(); for (Type t : tArgs) { System.out.println(t.toString()); } } } catch (NoSuchFieldException e) { e.printStackTrace(); } }}
3:
package com.daxin.fanxing;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.Arrays;import java.util.List;class Test { public Listlist = new ArrayList ();}/** * 通过反射方法调用破坏容器的泛型约束 */public class Test2 { /** * 泛型方法,具体类型由接受的变量的类型确定 * @return */ public static List getList(){ return new ArrayList (); } public static void printT(T t){ System.out.println(t); } public static void main(String[] args) throws Exception { getList();//返回的是一个List