通过反射读取接口的静态字段

时间:2015-10-10 08:12:42

标签: java android-proguard

我有一个界面:

public interface Interface {
public static final String FIELD1 = "BAR";
public static final String FIELD2 = "FOO";
.........
}

我尝试使用此代码通过反射读取字段名称:

    Field[] fields = Interface.class.getFields();
    for (Field f : fields) {
          ............
    }

问题是数组的长度始终为零。为什么呢?

编辑:我使用的是proguard,我认为这个问题与界面混淆有关。

2 个答案:

答案 0 :(得分:2)

我运行的代码与您提供的代码相同,并且能够从界面中打印字段的名称。

import java.lang.reflect.Field;

public class Prop {
  public static void main(String[] args)
  {
    Field[] fields = Interface.class.getFields();
    for (Field f : fields) {
      System.out.println(f.getName());
    }
  }
}

interface Interface {
  public static final String FIELD1 = "BAR";
  public static final String FIELD2 = "FOO";
}

输出:

FIELD1  
FIELD2

答案 1 :(得分:1)

只需使用:

Field[] fields = Interface.class.getDeclaredFields();

代替:

Field[] fields = Interface.class.getFields();

对我来说很好!