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编辑问题以实际显示错误行为的代码。