java:获取类中的所有变量名

ufk*_*ufk 84 java reflection

我有一个类,我想找到它的所有公共变量(不是函数).我怎么能这样做?谢谢!

Boz*_*zho 126

Field[] fields = YourClassName.class.getFields();
Run Code Online (Sandbox Code Playgroud)

返回该类的所有公共变量的数组.

getFields()返回整个班级中的字段 - heirarcy.如果您希望仅在相关类中定义字段,而不是其超类,请使用以下方法getDeclaredFields()过滤这些字段:publicModifier

Modifier.isPublic(field.getModifiers());
Run Code Online (Sandbox Code Playgroud)

YourClassName.class字面实际上代表类型的对象java.lang.Class.检查其文档以获得更有趣的反射方法.

Field上面的课是java.lang.reflect.Field.你可以看一下整个java.lang.reflect包装.

  • 只是一个注释 - 最初我的回答包含了一个错误的陈述,但它已被多次推翻.请仔细阅读;) (2认同)

Sah*_*bra 12

您可以根据需要使用这两种中的任何一种:

Field[] fields = ClassName.class.getFields(); // returns inherited members but not private members.
Field[] fields = ClassName.class.getDeclaredFields(); // returns all members including private members but not inherited members.
Run Code Online (Sandbox Code Playgroud)

要仅过滤上面列表中的公共字段(根据要求),请使用以下代码:

List<Field> fieldList = Arrays.asList(fields).stream().filter(field -> Modifier.isPublic(field.getModifiers())).collect(
    Collectors.toList());
Run Code Online (Sandbox Code Playgroud)