我有一个界面:
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,我认为这个问题与界面混淆有关。
答案 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();
对我来说很好!