标签:
1 2 | Class<Teacher> clz = Teacher. class ; Teacher t2 = clz.newInstance(); |
1 2 3 | Constructor<Teacher> con = clz.getDeclaredConstructor(String. class ); con.setAccessible( true ); //假如访问的是私有的就要把setAccsessable设置为true,因为是有成员不能直接访问 Teacher t = con.newInstance( "will" ); |
1 2 3 4 5 6 | Class<InvokeMethodByVarArgsDemo> clz =InvokeMethodByVarArgsDemo. class ; Method m = clz.getMethod( "show" , int []. class ); //调用public static void show(int ...is) m.invoke( null , new int []{ 1 , 2 , 3 }); //YES //m.invoke(null,1,2,3);//ERROR m.invoke( null ,(Object) new int []{ 1 , 2 , 3 }); //YES m.invoke( null , new Object[]{ new int []{ 1 , 2 , 3 }}); //YES 访问静态方法不需要实例所以第一个参数可以为null |
1 | public Object invoke(Object obj,Object... args) new Object[]{传递的实际参数};通用做法; |
1 2 | public static <T extends Number> List<T> asList(T... a) { } Method m = clz.getMethod( "asList" , Number[]. class ); |
1 2 3 | Object ret= new Object[]{ 1 , 2 , 3 } Array.getLength(ret) //获取数组的长度 Array.get(ret, i) //获取数组ret中第i个的值 |
1 2 3 4 | Class<Cat> clz = Cat. class ; //使用反射得到Car类了的字段,并赋值,和取值 Field[] fs = clz.getDeclaredFields(); Field f = clz.getDeclaredField( "name" ); f.getName() //取出字段的值 |
1 | void set(Object obj, Object value) |
1 2 3 | Cat c = clz.newInstance(); f.setAccessible( true ); //先设置可访问 f.set(c, "Lucy" ); //设置实例c的字段name的值为Lucy |
1 2 3 4 5 | Class<?> getType() //返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。 Type getGenericType() //返回一个 Type 对象,它表示此 Field 对象所表示字段的声明类型。 ParameterizedType是Type子类, 表示参数化类型,也就是泛型类型 Type[] getActualTypeArguments() //返回表示此类型实际类型参数的 Type 对象的数组。 Type getRawType() //返回 Type 对象,表示声明此类型的类或接口。 |
1 2 3 | Type t = this .getClass().getGenericSuperclass(); ParameterizedType pt = (ParameterizedType) t; clz = (Class<T>) pt.getActualTypeArguments()[ 0 ]; //获取的是数组,强转为指定的类型 |
标签:
原文地址:http://www.cnblogs.com/lindongdong/p/605dbead1f1d10b838ccab708c7c4228.html