1

Java でリフレクションを使用してクラス内のフィールドを取得するのに問題があります。

public class CraftLib
{
    static List alloyRecipes = new ArrayList();
    public static HashSet damageOnCraft = new HashSet();
    public static HashMap damageContainer = new HashMap();

public static void addAlloyResult(ur output, Object[] input)
{
    alloyRecipes.add(Arrays.asList(new Object[] { input, output }));
}
//file continues

私は次のようにフィールドを取得しようとします:

try {
    Field[] fields = Class.forName("class.path").getFields();
    for(Field f : fields) {
    System.out.println(f.getName());
} catch (ClassNotFoundException e) {
    System.out.println("Damn.");
}
System.out.println(fields.length);

何らかの理由でdamageOnCraftanddamageContainerフィールドのみを取得できますが、本当に必要な ,alloyRecipesは取得されません。最初のファイルを編集できないので、そのフィールドを取得して編集する最良の方法は何ですか?

4

2 に答える 2

9

getFields()アクセスできない場合、プライベート、パッケージ保護、または保護されたフィールドは提供されません。

(getFields())この Class オブジェクトによって表されるクラスまたはインターフェースのすべてのアクセス可能なパブリック フィールドを反映する Field オブジェクトを含む配列を返します

そしてどうやらあなたのパッケージで保護されalloyRecipesたものはあなたのケースではアクセスできません。

あなたが必要getDeclaredFields()

(getDeclaredFields()) この Class オブジェクトによって表されるクラスまたはインターフェースによって宣言されたすべてのフィールドを反映する Field オブジェクトの配列を返します。これには、パブリック、保護、デフォルト (パッケージ) アクセス、およびプライベート フィールドが含まれますが、継承されたフィールドは除外されます。

于 2012-12-29T04:44:12.077 に答える
0

クラスを他のパッケージと同じパッケージに入れると、パッケージで保護されたフィールドを読み取ることができます。

于 2012-12-29T04:44:37.673 に答える