Eclipse,Java:从静态字符串生成 class 字段,反之亦然

Eclipse, Java: Generate class field from static string or vice versa

我正在使用 mongo 开发 JAVA 网络服务,以实现 mongo java 驱动程序 POJO api(如 Morphia),我像下面这样建立我的 POJO:

    public class User {
        public static final String USER_NAME = "userName";
        private String userName;
        public User() {
        }
        // getter && setter //
    }

USER_NAME = "userName" 是供将来用作字段名称的参考。我想要实现的是我可以使用一个简单的 if 来检查接收到的数据是否等于字段名称。例如:

    User user = new User();
    String receivedData = httpRequest.getParameter(User.USER_NAME);
    if (receivedData == null) {
        return null;
    } else {
        user.setUserName(receivedData);
        userCollection.insertOne(user);  
            // userCollection is MongoCollection<User>
        return Gson().toJson(user);
    }

我正在寻找一个 eclipse 函数或插件,它可以自动生成一个声明(USER_NAME = "userName"private String userName),并确保代码的一致性。

当然,如果有任何更好的实践建议,我们将不胜感激。

编辑

Stephan 的反射方法为代码提供了极大的灵活性。但是,与我最初的简化示例相比,实际情况可能更复杂。例如,一个httpRequest 有许多不同的参数,这些参数存储在不同的(n) 个POJO 中,每个POJO 有许多不同的(n) 个字段。在这种情况下,我们将执行 n*n 循环以获取字段值。

如果要对 POJO 的所有字段执行相同的操作,请考虑迭代 User.class.getFields() 的结果。对于每个 Field 获取名称 (f.getName()),使用名称检索值并将其设置到字段 (f.set(object,value))。使用这种方法,不需要像 USER_NAME.

这样的常量

编辑 1:如果性能是一个问题,您当然可以一劳永逸地将所有这些字段预先收集到某个集合中,但是瓶颈将仍然存在为每个可能的字段尝试 httpRequest.getParameter()。没有什么特定于反思方法。

编辑 2:在 "nicer" 语言中,可以使用类型检查语法来检索 Field 实例,例如想象(不是 Java):

Field f = User::userName;

这个答案基本上表明生成冗余常量并不是绝对必要的,因为始终将名称连接到字段的东西已经存在,它是 Field