像这样的一个类:
public class MethodSubject {
public String getString(String str) {
return "hello";
}
protected void setStr(String str) {
}
int getID(int t) {
return 100;
}
private void setID(int id) {
}
}
然后,我使用反射来获得方法
Class<MethodSubject> clz=MethodSubject.class;
Method[] methods=clz.getDeclaredMethods();
for(Method method:methods){
int modifier=method.getModifiers();
if ((modifier& Modifier.PUBLIC)==1){
Log.e("target,",method.toString());
}
}
则日志为:
public int ...MethodSubject.getID(int)
public String ...MethodSubject.getString(java.lang.String)
public void ...MethodSubject.setStr(java.lang.String)
修饰符为什么要改变?
我觉得你的设置有问题。我刚刚在这里运行了这个简单的测试:
import java.lang.reflect.*;
public class Test {
void foo() { };
public void bar() {};
protected void foobar() {};
public static void main(String[] args) {
Class<Test> clz = Test.class;
Method[] methods=clz.getDeclaredMethods();
for(Method method:methods){
int modifier=method.getModifiers();
if ((modifier& Modifier.PUBLIC)==1){
System.out.println("target: " + method.toString());
}
}
}
}
和预期的一样,打印出:
target: public void Test.bar()
target: public static void Test.main(java.lang.String[])
结论:java行为如预期;