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()) 返回一个包含 Field 对象的数组,反映此 Class 对象表示的类或接口的所有可访问公共字段

显然,在您的情况下,您的包裹保护alloyRecipes是不可访问的。

你需要getDeclaredFields()

(getDeclaredFields()) 返回一个 Field 对象数组,反映由该 Class 对象表示的类或接口声明的所有字段。这包括公共、受保护、默认(包)访问和私有字段,但不包括继承的字段。

于 2012-12-29T04:44:12.077 回答
0

将您的类与另一个类放在同一个包中,然后它将能够读取包保护字段。

于 2012-12-29T04:44:37.673 回答