在Android中的组件化开发,在我的理解来说就是想要你就加进来不要的话就直接删除,所以直接添加类这一方法是不行的,而Java的反射对我们来说,是很好的支持。只不过两个模块之间要继承同一个类,这样子才能实现。
下面是反射的代码:
public class One {
public String aa="aa";
public static String bb="static";
private String priva="private";
String defaul="default";
public String getAa() {
System.out.print(" getAa"+aa);
return aa;
}
public void setAa(String aa) {
System.out.print(" setAa"+aa);
this.aa = aa;
}
public static String getBb() {
System.out.print(" getBb"+bb);
return bb;
}
public static void setBb(String bb ,String cc) {
System.out.print(" setBb"+bb+" "+cc);
One.bb = bb;
}
}
关键部分:
public class Text {
static One one;
@SuppressWarnings("null")
public static void main(String[] args) throws Exception {
one =new One();
String aa=(String) getProperty(one, "bb");
System.out.print(aa);
// String bb=(String) getClassStatic("One", "bb");
// oBjectMethod("cc" ,"马丹");
// classMethod("类","静态方法");
Object object=one;
invokeStaticMethod("One","setBb","实验","中心");
if (object instanceof One) {
System.err.print("是可以的");
}
}
static void oBjectMethod(Object... args) throws Exception{
// invokeMethod(one,"getAa",args);
invokeMethod(one,"setBb",args);
}
/**
* 得到对象的属性 {类的静态属性也是可以拿到的}
* */
public static Object getProperty(Object owner,String fieldName) throws Exception {
//得到该对象的Class
Class<?> owerClass=owner.getClass();
//通过Class得到Class得到类声明的属性
Field field=owerClass.getField(fieldName);
//通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
Object prObject=field.get(owner);
return prObject;
}
/**
* 执行某对象的方法
* */
public static Object invokeMethod(Object owner,String methodName,Object[] args)throws Exception {
Class<?> ownerClass=owner.getClass();
Class<?>[] argsClass=new Class<?>[args.length];
for (int i = 0; i < args.length; i++) {
argsClass[i] =args[i].getClass();
}
Method method=ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 得到某个类的静态属性
* */
public static Object getClassStatic(String owerClass,String fieldName)throws Exception{
Class<?> oClass =Class.forName(owerClass);
Field field=oClass.getField(fieldName);
Object objec=field.get(fieldName);
return objec;
}
static void classMethod(Object... args) throws Exception{
invokeStaticMethod("One","setBb",args);
}
/**
* 得到某个类的静态方法
* methodName:方法名
* args:参数
*
* */
public static Object invokeStaticMethod(String className,String methodName,Object... args)throws Exception{
Class<?> oneClass=Class.forName(className);
Class<?>[] argsClass=new Class<?>[args.length];
for(int i=0;i<argsClass.length;i++){
argsClass[i]=args[i].getClass();
}
Method method=oneClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
}
网友评论