Java反射机制实践

来源:互联网 发布:淘宝链接怎么复制 编辑:程序博客网 时间:2024/05/22 17:49

Java反射机制的使用:

package zyw.testevent;import java.lang.reflect.Method;import java.util.ArrayList;public class CustomEventBus {protected static CustomEventBus customEventBus;private ArrayList<Object> contextlist = new ArrayList<>();public static CustomEventBus getDefault(){if(null == customEventBus){customEventBus = new CustomEventBus();}return customEventBus;}//发布事件public void post(Object object){for(int i = 0; i < contextlist.size(); i++){try {Object context = contextlist.get(i);Class<?> classss = context.getClass();Method method=classss.getMethod("onEventMainThread", object.getClass());method.setAccessible(true);method.invoke(context, object);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//发送到指定类名的方法中public void post(String activityName, Object object){for(int i = 0; i < contextlist.size(); i++){try {Class<?> classss = contextlist.get(i).getClass();if(activityName != null && activityName.equals(classss.getName())){Method method=classss.getMethod("onEventMainThread", Object.class);method.setAccessible(true);method.invoke(classss, object);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void register(Object cObject){contextlist.add(cObject);}public void unregister(Object cObject){contextlist.remove(cObject);}}

package zyw.testevent;public class CeshiClass {public CeshiClass(){CustomEventBus.getDefault().register(CeshiClass.this);}public void onEventMainThread(String name){System.out.println(name);}}

package zyw.testevent;public class TestEvent {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubCeshiClass c = new CeshiClass();String str = new String();str  = "测试是否成功实现反射机制!";CustomEventBus.getDefault().post(str);//CustomEventBus.getDefault().unregister(c);CustomEventBus.getDefault().post(str);//取消注册CustomEventBus.getDefault().unregister(c);CustomEventBus.getDefault().post(str);}}

最后的输出结果:

测试是否成功实现反射机制!
测试是否成功实现反射机制!


0 0
原创粉丝点击