1

我正在使用此代码来获取与对象关联的所有字段。有问题的对象有三个超类,其他类从这个对象扩展而来。

for (Field f : this.getClass().getFields()){
    try{
        fieldName = f.getName();
        fieldType = f.getType().toString();
        //Do more stuf
    }

我不想获取与超类关联的字段,但我想要当前类中的所有字段以及所有可能从它扩展的字段。

如何筛选出我需要的字段?

4

2 回答 2

5

我不想获取与超类关联的字段,但我想要当前类中的所有字段以及所有可能从它扩展的字段。

你不能得到“所有可能从它扩展的东西”——但如果你使用Class.getDeclaredFields()而不是getFields()then 你只会得到该类中声明的字段。

于 2012-11-19T23:32:56.443 回答
4

对于每一个Field你可以getDeclaringClass()用来确定声明字段的类,所以如果你有一个像这样的层次结构

A
|
B
|
C
|\
D E

C并且您只想要在,D或中声明的字段E,那么您可以说

for (Field f : this.getClass().getFields()){
  if(C.class.isAssignableFrom(f.getDeclaringClass())) {
    // f was declared by C or one of its subclasses

If thisis an instance Cyou'll get just public fields of C, if thisis a Dyou'll get public fields of Cand D, if thisis an AorB你将一无所获。

于 2012-11-19T23:38:52.693 回答