一个方法是受保护的,但是我通过反射得到了方法的修饰符,这个修饰符是公共的.IDE是Android Studio



像这样的一个类:

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行为如预期;

相关内容

  • 没有找到相关文章

最新更新