如何才能获得仅与当前类相关联的字段,而不是其所有父类?
public class BaseClass()
{
public int x = 0;
}
public class AnotherClass() extends BaseClass
{
public int y = -1;
public int z = -2;
public void doStuff()
{
for(Field f : this.getClass().getFields())
{
//Save each field to a file
}
}
}
我想只获得属于AnotherClass的Y和Z.但上面也给了我X.
这意味着要替换必须键入我想要保存的每个值。它没有以任何典型格式保存。它必须像这样保存,所以不建议以不同的方式保存字段。
过滤掉每个字段的名称会使其失败,因为有超过200个。
答案 0 :(得分:7)
您只能使用getDeclaredFields.获取在类中声明的字段。它将排除继承的字段。
答案 1 :(得分:2)
您可以根据Field
的{{1}}:
getDeclaredClass()
这只为你的例子挑选了public static List<Field> fieldsDeclaredDirectlyIn(Class<?> c) {
final List<Field> l = new ArrayList<Field>();
for (Field f : c.getFields())
if (f.getDeclaringClass().equals(c))
l.add(f);
return l;
}
和y
。
答案 2 :(得分:1)
对于某些功能,可能有更简洁的方法来执行此操作,但明显的答案(以及我过去所做的)是找到this.getClass().getFields()
和{{1之间的差异数组。
答案 3 :(得分:1)
使用公开Field[] getDeclaredFields()
返回Field对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但不包括继承的字段。
Field[] fields = AnotherClass.class.getDeclaredFields();
for(Field f : fields){
System.out.println(f.getName());
}