获取类的字段名称数组

时间:2014-06-17 09:54:14

标签: java arrays

我想在User类中获取字段名称数组。例如姓名,年龄

我尝试了以下代码 -

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;


public class Test {

    public static void main(String[] args) {
          Field[] fields = User.class.getDeclaredFields();
          ArrayList<Field> utilList = new ArrayList<Field>(Arrays.asList(fields));
           System.out.println(utilList);
    }
}

class User{
    String name;
    int age;
}

但它正在打印[java.lang.String prac1.User.name, int prac1.User.age]

我需要使用方括号打印[name,age]而不循环使用它。

可以在之前和之后附加方括号,但这不是我需要它的方式。它应该是独立的。

是否有可能以某种方式使用重写toString方法?

6 个答案:

答案 0 :(得分:4)

遍历utilList并在每个项目上调用Field.getName

答案 1 :(得分:2)

如果您使用的是Java 8,那么您可以利用功能特性使用地图功能将列表映射到新列表:

List<String> mapped = utilList.stream().map(field -> field.getName()).collect(Collectors.toList());  

String[] mapped = utilList.stream().map(field -> field.getName()).toArray();

查看this了解详情,tutorial也可以为您提供帮助。

答案 2 :(得分:1)

ArrayList<String> utilList = new ArrayList<String>();
for (Field field: fields) {
  utilList.add(field.getName());
}

但我没有看到使用utilList ...

的重点

答案 3 :(得分:0)

您可以使用getName的{​​{1}}方法。

Field

<强>输出

Field[] fields = User.class.getDeclaredFields();
for (Field f: fields) {
    System.out.println(f.getName());
}

答案 4 :(得分:0)

应该是

Class klass = User.class;
List<String> fieldNames = new ArrayList<String>();
for(Field field: klass.getDeclaredFields()) {
    fieldNames.add(field.getName());
}
System.out.println(fieldNames);

答案 5 :(得分:0)

使用正则表达式的解决方案,供参考:

// Class
private static final Pattern FIELD_PATTERN =
    Pattern.compile("(?:[\\dA-Za-z\\.]+) (?:[\\dA-Za-z\\.]+)?\\.([A-Za-z]+)");

// Method
{
    // ...
    Matcher matcher=FIELD_PATTERN.matcher(utilList.toString());
    while(matcher.find())
        System.out.println(matcher.replaceAll("$1"));
}

你得到:

  

[姓名,年龄]

请参阅regex explanation并尝试code demo

哦,你可以用这个构建一个单行:

System.out.println(User.class.getDeclaredFields().toString().replaceAll("(?:[\\dA-Za-z\\.]+) (?:[\\dA-Za-z\\.]+)?\\.([A-Za-z]+)", "$1"));