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 block
e.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 block
e.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 stub
CeshiClass 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);
}
}
最后的输出结果:
测试是否成功实现反射机制!
测试是否成功实现反射机制!