我是靠谱客的博主 冷傲丝袜,最近开发中收集的这篇文章主要介绍【Java】【反射】 使用反射方式去实现一个接口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用放射方式去实现一个接口


场景:

假设想使用 MediaScannerConnection 类的 scanFile 静态方法,但需传入参数OnScanCompletedListener

使用如下反射方式便可.


Class<?> MediaScanner = null;
Class<?> OnScanCompletedListener = null;
try {
MediaScanner = Class.forName("android.media.MediaScannerConnection");
OnScanCompletedListener = Class.forName("android.media.MediaScannerConnection$OnScanCompletedListener");
Method scanFileMethod = MediaScanner.getDeclaredMethod("scanFile", Context.class, String[].class,
String[].class, OnScanCompletedListener);
Object listener = Proxy.newProxyInstance(OnScanCompletedListener.getClassLoader(),
new Class[] { OnScanCompletedListener }, new OnScanCompletedListenerImpl());
scanFileMethod.invoke(null, new Object[] {mContext, paths, mimeTypes, listener});
} catch (Exception e) {
Log.e(TAG, e.toString(), e);
}
public class OnScanCompletedListenerImpl implements InvocationHandler {
private onScanCompletedCallback mCallback;
public OnScanCompletedListenerImpl(onScanCompletedCallback callback) {
mCallback = callback;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
Log.d(TAG, "invoke, method: " + method.getName());
if("onScanCompleted".equals(method.getName())) {
String path = (String) args[0];
Uri uri = (Uri) args[1];
Log.d(TAG, "invoke, args, path: " + path + ", uri: " + uri);
mCallback.onScanCompleted(path, uri);
}
} catch (Exception e) {
Log.e(TAG, e.toString(), e);
}
return proxy;
}
}


参考链接:

How to implement an interface using Reflection







最后

以上就是冷傲丝袜为你收集整理的【Java】【反射】 使用反射方式去实现一个接口的全部内容,希望文章能够帮你解决【Java】【反射】 使用反射方式去实现一个接口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部