标签:
import java.io.InputStream; import java.util.List; public class Person { public Integer id = 1; private String name = "default"; private static String password = "pass"; public Person() { System.out.println("无参构造函数"); } public Person(Integer id, String name) { this.id = id; this.name = name; System.out.println("有参构造函数"); } private Person(List list) { System.out.println("私有有参构造函数"); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String run() { System.out.println("run..."); return "run"; } public String eat() { System.out.println("eat..."); return "eat"; } /*测试反射的方法*/ public void m1() { System.out.println("m1"); } public void m1(String name, int age) { System.out.println(name + " - " + age); } public Class[] m1(String name, int[] age) { return new Class[]{String.class}; } private void m1(InputStream inputStream) { System.out.println(inputStream); } public static void m1(int num) { System.out.println(num); } public static void main(String[] args) { System.out.println("main method"); } }
import java.io.InputStream; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class ReflectDemo { public static void main(String[] args) throws InvocationTargetException { try { Class clazz = Class.forName("Person"); // 反射构造器 Constructor constructor = clazz.getConstructor(null); Person person = (Person) constructor.newInstance(null); Constructor constructor1 = clazz.getConstructor(Integer.class, String.class); Person person1 = (Person) constructor1.newInstance(1, "jack"); Constructor constructor2 = clazz.getDeclaredConstructor(List.class);// private method constructor2.setAccessible(true); Person person2 = (Person) constructor2.newInstance(new ArrayList<>()); Person person3 = (Person) clazz.newInstance(); // 反射类的方法 Person p = new Person(); Method method = clazz.getMethod("m1", null); method.invoke(p, null); Method method1 = clazz.getMethod("m1", String.class, int.class); method1.invoke(p, "jack", 11); Method method2 = clazz.getMethod("m1", String.class, int[].class); Class[] classes = (Class[]) method2.invoke(p, "rose", new int[]{1, 2, 3}); System.out.println(classes[0]); Method method3 = clazz.getDeclaredMethod("m1", InputStream.class); method3.setAccessible(true); /*method3.invoke(p, null);*/ Method method4 = clazz.getMethod("m1", int.class); method4.invoke(null, 23); //静态方法调用不需要对象 // 反射 main 方法 Method main = clazz.getMethod("main", String[].class); //main.invoke(null, new Object[]{new String[]{"a", "b"}}); main.invoke(null, (Object) new String[]{"a", "b"}); // 反射类的字段 Field field = clazz.getField("id"); Class type = field.getType(); if (type.equals(Integer.class)) { field.set(p, 11);// setter Integer id = (Integer) field.get(p); System.out.println(id); } Field field1 = clazz.getDeclaredField("name"); field1.setAccessible(true); String name = (String) field1.get(p); System.out.println(name); Field field2 = clazz.getDeclaredField("password"); field2.setAccessible(true); String password = (String) field2.get(p); System.out.println(password); } catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | NoSuchFieldException e) { e.printStackTrace(); } } }
可以用到的工具类:BeanUtils,http://commons.apache.org/proper/commons-beanutils/
标签:
原文地址:http://www.cnblogs.com/geb515/p/4483699.html