标签:名称 arguments code ctc 学习 调用 数据 nts param
1 //ReflectInfo为自己创建的类 2 Class reflectClass1 = new ReflectInfo().getClass();
1 Class reflectClass2 = ReflectInfo.class;
1 Class reflectClass3 = Class.forName("Reflect.ReflectInfo");
1 //(ReflectInfo)为自己创建的类 2 3 //获取公有构造函数 4 Class.forName("Reflect.ReflectInfo").getConstructor(); 5 //获取所有构造函数 6 Class.forName("Reflect.ReflectInfo").getDeclaredConstructors(); 7 8 //根据参数类型获取构造函数 9 Class.forName("Reflect.ReflectInfo").getConstructor(类型.class...); 10 11 //使用构造函数 12 //跳过修饰符验证 13 //Class.forName("Reflect.ReflectInfo").getConstructor(类型.class...).setAccessible(true); 14 Class.forName("Reflect.ReflectInfo").getConstructor(类型.class...).newInstance(参数...);
反射自定义函数并调用
1 //(ReflectInfo)为自己创建的类 2 3 //获取公有自定义函数 4 Class.forName("Reflect.ReflectInfo").getMethods(); 5 //获取所有自定义函数 6 Class.forName("Reflect.ReflectInfo").getDeclaredMethods(); 7 8 //根据参数类型获取公有自定义函数 9 Class.forName("Reflect.ReflectInfo").getMethod("函数名称",参数类型.class..); 10 //根据参数类型获取所有自定义函数 11 Class.forName("Reflect.ReflectInfo").getDeclaredMethod("函数名称",参数类型.class..); 12 13 //使用自定义函数 14 //跳过修饰符验证 15 //Class.forName("Reflect.ReflectInfo").getMethod("函数名称",参数类型.class...).setAccessible(true); 16 Class.forName("Reflect.ReflectInfo").getMethod("函数名称",参数类型.class...).invoke( 17 Class.forName("Reflect.ReflectInfo").getConstructor(构造类型.class...).newInstance(构造参数...), 参数...);
1 //(ReflectInfo)为自己创建的类 2 //获取公有字段 3 Class.forName("Reflect.ReflectInfo").getFields(); 4 //获取所有字段 5 Class.forName("Reflect.ReflectInfo").getDeclaredFields(); 6 7 //根据字段名称获取公有字段 8 Class.forName("Reflect.ReflectInfo").getField("字段名称"); 9 //根据字段名称获取所有字段 10 Class.forName("Reflect.ReflectInfo").getDeclaredField("字段名称"); 11 12 //使用 13 //跳过修饰符验证 14 //[Field].setAccessible(true); 15 Class.forName("Reflect.ReflectInfo").getField("字段名称") 16 .set( 17 Class.forName("Reflect.ReflectInfo").getConstructor(构造类型.class...).newInstance(构造参数...),[value] 18 )
1 public class ReflectMain { 2 public static void main(String[] args) { 3 System.out.println(new String("true").getClass() == String.class); 4 5 Class<?> array = new String[]{"False", "False"}.getClass(); 6 System.out.println(array); 7 System.out.println(array == String.class); 8 9 Class<?> collection = new ArrayList<String>().getClass(); 10 System.out.println(collection); 11 System.out.println(collection == array); 12 13 Class<?> _Interface = new Exception().getClass(); 14 System.out.println(_Interface); 15 16 Class<?> _generics = (Class<?>) ((ParameterizedType) new ReflectInfo().getClass() 17 .getGenericInterfaces()[0]).getActualTypeArguments()[0]; 18 System.out.println(_generics); 19 } 20 } 21 22 interface testParameterizedType<T> { 23 }; 24 class ReflectInfo implements testParameterizedType<String> { 25 };
1 ArrayList<String> strList = new ArrayList<>(); 2 //获取ArrayList的Class对象,反向的调用add()方法,添加数据 3 Class listClass = strList.getClass(); //得到 strList 对象的字节码 对象 4 //获取add()方法 5 Method m = listClass.getMethod("add", Object.class); 6 //调用add()方法 7 m.invoke(strList, 100);
标签:名称 arguments code ctc 学习 调用 数据 nts param
原文地址:https://www.cnblogs.com/jinjidewoniu/p/9152754.html