反射机制构造实例调用方法
1. 无参构造
假如有这么一个类A:
public class A {
public void foo(String name) {
System.out.println("Hello, " + name);
}
}
可以编写另外一个类来反射调用A上的方法:
import java.lang.reflect.Method;
public class TestClassLoad {
public static void main(String[] args) throws Exception {
Class<?> clz = Class.forName("A");
Object o = clz.newInstance();
Method m = clz.getMethod("foo", String.class);
for (int i = 0; i < 16; i++) {
m.invoke(o, Integer.toString(i));
}
}
}
2. 有参构造
假如有这么一个类A:
package com.mhc.rollsroyce.risk.component;
import lombok.Data;
/**
* Created by jiangjingming on 2017/9/30.
*/
@Data
public class A {
private String name;
private int number;
public A(String name, Integer number) {
this.name = name;
this.number = number;
}
public void showNameAndNumber(String name) {
System.out.println(name);
}
}
可以编写另外一个类来反射调用A上的方法:
import java.lang.reflect.Method;
public class TestClassLoad {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName(A.class.getName());
//参数类型
Class<?>[] params = {String.class, Integer.class};
//参数值
Object[] values = {"baili", new Integer(1)};
//构造带参的构造函数
Constructor<?> constructor = cls.getDeclaredConstructor(params);
//根据构造函数,传入值生成实例
Object object = constructor.newInstance(values);
Method methodInit = cls.getDeclaredMethod("showNameAndNumber", String.class);
Object a = methodInit.invoke(object,"hellow");
System.out.println(a);
}
}