java 反射
package com.java.lesson.reflect;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;
public class ReflectLessonDemo01 {
private String str01; private String str02;
public int add(int a, int b) { return a + b; }
public int multi(int a, int b) { return a * b; }
public static void main(String[] args) {
// // ① Class<?> ----> Class.forName() // try { // Class<?> classType = Class.forName(ReflectLessonDemo01.class // .getName()); // Method[] methods = classType.getDeclaredMethods(); // // for (Method method : methods) // System.out.println(method); // } catch (ClassNotFoundException e) { // e.printStackTrace(); // }
// ②
try { Class<?> classType = Class.forName(ReflectLessonDemo01.class.getName());
Object invokeObject = classType.newInstance();
Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class });
Object result = addMethod.invoke(invokeObject, new Object[] { 1, 2 });
System.out.println((Integer)result);
} catch (InstantiationException e) {
e.printStackTrace(); }
catch (IllegalAccessException e) {
e.printStackTrace(); }
catch (ClassNotFoundException e) {
e.printStackTrace(); }
catch (SecurityException e) {
e.printStackTrace(); }
catch (NoSuchMethodException e) {
e.printStackTrace(); }
catch (IllegalArgumentException e) {
e.printStackTrace(); }
catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
===========================
package com.java.lesson.reflect;
import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;
public class ReflectTest {
public Object copy(Object object) {
Class<?> classType = object.getClass(); try { // Constructor cons = classType.getConstructor(new Class[] {}); Constructor cons = classType.getConstructor(new Class[] { String.class, int.class });
Object obj = cons.newInstance(new Object[] { "hello", 5 });
} catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }
System.out.println(classType.getName()); return null; }
public static void main(String[] args) {
ReflectTest test = new ReflectTest(); test.copy(new Customer());
}
}
class Customer { private Long id; private String name; private int age;
public Customer() {
}
public Customer(String name, int age) { this.name = name; this.age = age; } }