java利用反射为接口实例化对象并调用
package xxxxx;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import xxxxx.MyLibrary.MyCallback;
import java.lang.reflect.InvocationHandler;
class MyLibrary {
public interface MyCallback {
void doMyCallback();
}
public void mainMethod(MyCallback myCallback) {
System.out.println("doing MyLibrary mainMethod...");
myCallback.doMyCallback();
}
}
class MyHandler implements InvocationHandler{
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("doing MyHandler invoke...");
return null;
}
}
public class Test3 {
public static void main(String[] args) throws Exception {
Class<?> myLibraryClazz = Class.forName("xxxxx.MyLibrary");//类
Class<?> myCallbackClazz = Class.forName("xxxxx.MyLibrary$MyCallback");//接口
MyHandler myHandler = new MyHandler();//类
MyCallback myCallback = (MyCallback)Proxy.newProxyInstance(
Test3.class.getClassLoader(),//类加载器
new Class[] { myCallbackClazz },//接口数组
myHandler//为接口实现的对应具体方法
);//为接口实例化对象
Method method = myLibraryClazz.getDeclaredMethod("mainMethod", MyCallback.class);//(类名,参数类型)
method.invoke(myLibraryClazz.newInstance(), myCallback);//调用方法,(实例化对象,内部接口实现对象)
}
}
运行结果:
doing MyLibrary mainMethod...
doing MyHandler invoke...
————————————————
版权声明:本文为CSDN博主「彩夕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37956311/article/details/85328915