2016-09-06 4 views
1

このようなクラスされています。そこで、私はこの方法にメソッドは保護されていますが、リフレクションによってメソッドの修飾子を取得しました。修飾子はpublicです。 IDEは、Android Studioの

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 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) { 

    } 
} 

です:

public int ...MethodSubject.getID(int) 
public String ...MethodSubject.getString(java.lang.String) 
public void ...MethodSubject.setStr(java.lang.String) 

なぜ修飾子変更されましたか?

+0

正しいログを探していますか?私はあなたのシナリオをテストしたので、保護されている修飾子を持つ印刷方法名ではありません。 –

+0

私には同じですが、かなり良いですか? –

+0

私は何を言っているのでしょうか。 Eclipseでこれらのコードをテストしますが、うまくいきます。しかし、それがAndroidStuioの仕事であれば、ログは私がそこに書いているものです。 – Lyri

答えて

0

あなたの設定で何かが間違っていると思います。私はここに、この簡単なテストを実行しました:

target: public void Test.bar() 
target: public static void Test.main(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()); 
    } 
    } 
} 
} 

と予想されるように、そのプリント

期待通りにJavaが動作します。あなたのセットアップの何かが間違っています。

+0

私はEclipseでテストします。それはうまく動作します。しかし、AndroidStuioでテストしたところ、ログは正しくありません。 – Lyri

関連する問題