2013-03-11 100 views
1

我得到2个类:B延伸A通过反射获取子类字段

我在类B上使用getDeclaratedFields(),并且我没有从A类获得字段。

我该如何得到它们?

+0

请分享您用于从poi导出的代码。很有可能你没有关闭相同的东西。 – Joe2013 2013-03-11 09:14:49

+0

分享一些代码会给更好的主意 – 2013-03-11 13:12:13

+0

文件是否保存为只读?工作表是否受到保护以禁止此类修改? – shahkalpesh 2013-03-11 15:43:48

回答

1

getDeclaredFields()返回由类而不是超类声明的字段。

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

使用getFields方法检索由类和超类声明的字段。

具体地,如果该Class对象表示一个类,则此方法返回 这个类的公共字段和它的所有超

Java Class以获取更多信息的。

0

您应该使用Class#getSuperclass()访问类的超类,并使用Class#getDeclaredFields()获取其字段,重复(递归)直到您到达Object或您希望停止的选择类。

下面是一些示例代码:

@Test 
public void getDeclFieldsIncludingBase() { 
    List<Field> fields = new ArrayList<>(); 
    getDeclFieldsIncludingBase(B.class, fields); 
    for(Field f : fields) { 
     System.out.println(f.getName());  
    } 
} 

private void getDeclFieldsIncludingBase(Class<?> cl, List<Field> fields) { 
    Field[] declaredFields = cl.getDeclaredFields(); 
    for(Field f : declaredFields) { 
     fields.add(f); 
    } 
    Class<?> superclass = cl.getSuperclass(); 
    if(! Object.class.equals(superclass)) { 
     getDeclFieldsIncludingBase(superclass, fields); 
    } 
} 

实施例:

public class A { 
    int a; 
} 

public class B extends A { 
    int b; 
} 

输出应该

b 
a 
相关问题