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



我有一个接口:

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

我试图通过反射读取字段名,使用以下代码:

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

问题是数组的长度总是为0。为什么?

编辑:我正在使用proguard,我认为问题与界面混淆有关。

我正在运行与您提供的相同的代码,并且能够从接口打印字段的名称。

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

直接使用:

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

代替:

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

这对我来说很好!

最新更新