一、通过反射,获取另一个模块的方法(不能直接调用SettingActivity)
public class SettingActivity extends BaseActivity implements View.OnClickListener {
private void test() {
logE("我是反射拿到的数据");
}
Class<?> clazz = Class.forName("com.example.settinglib.activity.SettingActivity");
Method test = clazz.getDeclaredMethod("test", null);
test.setAccessible(true);//若是不调用这句代码,就会报错
Object object = clazz.newInstance();
test.invoke(object, null);
test.setAccessible(true);
若是不调用这句代码,就会报错
cannot access private method void 。。。。
of class 。。。。。。
二、通过反射,获取另一个模块的方法(不能直接调用SettingActivity)
public class SettingActivity extends BaseActivity implements View.OnClickListener {private void test(String name) {
logE("我是反射拿到的数据 = "+name);
}
try {
Class<?> clazz = Class.forName("com.example.settinglib.activity.SettingActivity");
Method test = clazz.getDeclaredMethod("test", String.class);
test.setAccessible(true);//若是不调用这句代码,就会报错
test.invoke(clazz.newInstance(), "首页调用");
} catch (Exception e) {
e.printStackTrace();
}
最后打印:
E/date: 我是反射拿到的数据 = 首页调用
三、在同一个模块调用另一个类的私有方法
public class SettingActivity extends BaseActivity implements View.OnClickListener {
private void test() {
logE("我是反射拿到的数据");
}
try {
Class<SettingActivity> settingActivityClass = SettingActivity.class;
Method test = settingActivityClass.getDeclaredMethod("test", null);
test.setAccessible(true);//若是不调用这句代码,就会报错
SettingActivity settingActivity = settingActivityClass.newInstance();
test.invoke(settingActivity, null);
} catch (Exception e) {
logE("异常=" +e.getMessage());
}
四、在同一个模块调用另一个类的私有方法(有参数)
public class SettingActivity extends BaseActivity implements View.OnClickListener {private void test(String name) {
logE("我是反射拿到的数据 = "+name);
}
Class<SettingActivity> settingActivityClass = SettingActivity.class;
Method test = settingActivityClass.getDeclaredMethod("test", String.class);
test.setAccessible(true);//若是不调用这句代码,就会报错
test.invoke(settingActivityClass.newInstance(), "我来了");
最后打印:
E/date: 我是反射拿到的数据 = 我来了