今天看了一个Method.invoke(Object var1, Object... var2)的方法,记录一下
public classTest {
private staticString getstr() {
return"wywywy";
}
publicString getMyname() {
return"my name is wy";
}
publicString getInfo(String[] objects) {
StringBuilder stringBuilder =newStringBuilder();
for(inti =0; i < objects.length; i++) {
Log.e(getClass().getName(), objects[i].toString());
}
return"i am is a shuai ge"+String.valueOf(objects.length-1);
}
}
第二个类
public classMainActivityextendsAppCompatActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
try{
try{
//1.
//反射加载类
Class tClass = Class.forName("com.example.wy.mytested.Test");
//得到方法
Method method = tClass.getDeclaredMethod("getstr");
//设置私有的方法也可以访问
method.setAccessible(true);
//如果是静态的可以直接传空
String a = (String) method.invoke(null);
Log.e(getClass().getName(), a);
//2.
Method method1 = tClass.getMethod("getMyname");
Object o =null;
try{
//如果不是静态的要传这个 方法的类的对象
o = method1.invoke(tClass.newInstance());
}catch(InstantiationException e) {
e.printStackTrace();
}
Log.e(getClass().getName(),"2-------------"+o);
//3.
Method method2 = tClass.getMethod("getInfo");
try{
//第二个参数是方法所需要的参数
Object s2= method2.invoke(null,newString[]{"a","b","c"});
Log.e(getClass().getName(),(String)s2);
}catch(Exception e) {
e.printStackTrace();
}
}catch(IllegalAccessException e) {
e.printStackTrace();
}catch(InvocationTargetException e) {
e.printStackTrace();
}
}catch(NoSuchMethodException e) {
e.printStackTrace();
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
网友评论