我有一个接口:
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();
这对我来说很好!