【Java】【反射】 使用反射方式去实现一个接口
2016-05-07 17:26
519 查看
使用放射方式去实现一个接口
场景:
假设想使用 MediaScannerConnection 类的 scanFile 静态方法,但需传入参数OnScanCompletedListener
使用如下反射方式便可.
参考链接:
How to implement an interface using Reflection
场景:
假设想使用 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】【反射】 使用反射方式去实现一个接口
- 【Java】【反射】 使用反射方式去实现一个接口
- 【Java】【反射】 使用反射方式去实现一个接口
- 【Java】【反射】 使用反射方式去实现一个接口
- Java反序列化漏洞加固方法
- java 中hashcode和equals 总结
- [置顶] 【Eclipse+PyDev】字体、颜色和背景的个性化设置
- Java基本数据类型的初始值
- 第一章 JAVA入门(Main函数简介)
- 第一章 JAVA入门(Hello World)
- Eclipse找不到或无法加载主类
- Spring 4 MVC @RestController 注解实现REST Service(带源码)
- Java并发编程技术点
- Eclipse使用Maven构建SpringMVC小例子踩坑记——消失的src/main/java目录
- 《Thinking In Java第四版》拾遗
- JAVA中Iterator遍历,添加出现的ConcurrentModificationException异常
- Java反射机制浅析
- 极光推送JPush
- 【JAVA】算法排序(一)——选择排序法