抓取非公共字段的Java反射
在Java中使用反射获取类中的字段时遇到问题:抓取非公共字段的Java反射,java,reflection,Java,Reflection,在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
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);
出于某种原因,它只能抓取damageOnCraft
和damageContainer
字段,但我真正需要的alloyRecipes
字段没有抓取。我无法编辑第一个文件,因此获取和编辑该字段的最佳方法是什么?如果无法访问,则不会为您提供私有、包保护或保护字段
(getFields())返回一个数组,其中包含反映该类对象所表示的类或接口的所有可访问公共字段的字段对象
显然,在您的案例中无法访问受包保护的alloyRecipes
你需要
(getDeclaredFields())返回一个字段对象数组,该数组反映了由该类对象表示的类或接口声明的所有字段。此包括公共、受保护、默认(包)访问和私有字段,但不包括继承字段
如果无法访问,则不会提供私有、包保护或受保护字段
(getFields())返回一个数组,其中包含反映该类对象所表示的类或接口的所有可访问公共字段的字段对象
显然,在您的案例中无法访问受包保护的alloyRecipes
你需要
(getDeclaredFields())返回一个字段对象数组,该数组反映了由该类对象表示的类或接口声明的所有字段。此包括公共、受保护、默认(包)访问和私有字段,但不包括继承字段
将您的类与另一个类放在同一个包中,它将能够读取包保护字段。将您的类与另一个类放在同一个包中,它将能够读取包保护字段