【Java】【反射】 使用放射方式去实现一个接口
来源:互联网 发布:工业数据采集的重要性 编辑:程序博客网 时间:2024/04/29 19:48
使用放射方式去实现一个接口
场景:
假设想使用 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
0 0
- 【Java】【反射】 使用放射方式去实现一个接口
- Java反射实现接口
- Java反射实现接口
- Java反射实现接口
- JAVA反射的实现方式
- java中反射实现方式
- java 反射的使用方式
- java list去重操作实现方式
- Java中反射的实现方式
- Java中反射的实现方式
- Java中反射的实现方式
- Java反射实现几种方式
- java减少数据访问层代码—反射3—数据访问层就一个接口一个实现
- 使用JOOR实现Java反射
- java 放射机制简介
- 什么是java放射机制
- JAVA反射的一个简单实现
- JAVA反射实现一个拦截器(Interceptor)
- prototype中美元符号$的有关用法
- 十进制转化成十六进制i
- html5新增加的表单元素-output
- Math中的取整函数
- ajax回调打开新窗体防止浏览器拦截
- 【Java】【反射】 使用放射方式去实现一个接口
- CodeForces 165ASupercentral Point(水题)
- Android Studio分渠道打包
- 几进制的转换
- 判断ImageView当前是否使用指定的某一张图片
- Java反序列化漏洞加固方法
- 把检测出的人脸用椭圆和矩形框画出
- getDrawable(int) is deprecated
- 解决“An internal error occurred during: "GeneratingArtifacts". java.lang.NullPointerException”错误