116

クラスがあるとします:

public class R {
    public static final int _1st = 0x334455;
}

リフレクションを介して「_1st」の値を取得するにはどうすればよいですか?

4

3 に答える 3

145

最初にクラスのフィールド プロパティを取得すると、値を取得できます。タイプがわかっている場合は、get メソッドの 1 つを null で使用できます (静的フィールドの場合のみ。実際、静的フィールドの場合、get メソッドに渡された引数は完全に無視されます)。それ以外の場合は、getType を使用して、以下のように適切なスイッチを記述できます。

Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
    System.out.println(f.getInt(null));
}else if(t == double.class){
    System.out.println(f.getDouble(null));
}...
于 2010-04-21T18:06:48.157 に答える
80
 R.class.getField("_1st").get(null);

例外処理は、読者の課題として残しておきます。

基本的に、リフレクションを介して他のフィールドと同じようにフィールドを取得しますが、get メソッドを呼び出すと、操作するインスタンスがないため、null を渡します。

これは、最終的であるかどうかに関係なく、すべての静的フィールドで機能します。フィールドが公開されていない場合は、最初にそれを呼び出す必要がsetAccessible(true)あり、もちろん SecurityManager はこれらすべてを許可する必要があります。

于 2010-04-21T18:01:39.723 に答える
1

私は同じルートをたどっていました (生成された R クラスを調べて) が、これはおそらく Resources クラスの関数であると感じました。私が正しかった。

これを見つけました: Resources::getIdentifier

人々の時間を節約できるかもしれないと考えました。彼らはドキュメントでは落胆していると言っていますが、これはそれほど驚くべきことではありません.

于 2010-12-01T17:50:17.477 に答える