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

Java 通过反射读取接口的静态字段,java,android-proguard,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) { ...

我有一个界面:

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,我认为问题与界面混淆有关。

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

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();

这对我很管用

也许helpsIt对我来说很好用你显示的代码。如果你能重现这个问题,请在一个简短但完整的程序中展示。你使用的是什么java版本?这应该是一个注释,而不是一个答案-你基本上只是说你不能重现这个问题。我同意——我也不能——但这意味着这个问题不经编辑就不应该被回答。我同意你的看法。我将删除它。我不同意你们中的任何一个,“你错了”和其他任何代码一样是一个答案。@EJP上面的代码是有效的。这是我打算向OP展示的。那么你对这个答案有什么看法呢?@EJP:这对任何人都没用。如果问题是“我对多态性的理解是(xyz)”,那么“不,你错了,它是这样的……”对未来的读者很有用。当问题显示一些代码并声称它的行为方式是一种方式,而实际上它的行为方式是另一种方式时,它对站点没有任何价值——而说“不,它没有”的“答案”作为答案也没有任何价值。提供价值的是OP编辑问题以实际显示错误行为的代码。