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

Eclipse,Java:从静态字符串生成类字段,反之亦然,java,eclipse,pojo,Java,Eclipse,Pojo,我正在使用mongo开发JAVA web服务,为了实现mongo JAVA驱动程序POJO api(如Morphia),我建立了如下POJO: public class User { public static final String USER_NAME = "userName"; private String userName; public User() { } // getter &&

我正在使用mongo开发JAVA web服务,为了实现mongo JAVA驱动程序POJO api(如Morphia),我建立了如下POJO:

    public class User {
        public static final String USER_NAME = "userName";
        private String userName;
        public User() {
        }
        // getter && setter //
    }
USER\u 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);
    }
User User=新用户();
字符串receivedData=httpRequest.getParameter(User.User\u NAME);
if(receivedData==null){
返回null;
}否则{
user.setUserName(receivedData);
userCollection.insertOne(用户);
//userCollection是MongoCollection
返回Gson().toJson(用户);
}
我正在寻找一个eclipse函数或插件,它可以自动生成另一个声明(
USER\u NAME=“userName”
private String userName
),并确保代码的一致性

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

编辑


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

< P>如果您想对POJO的所有字段都做同样的操作,请考虑迭代<代码>用户.class .GeFieldSe()/<代码>的结果。对于每个
字段
获取名称(
f.getName()
),使用名称检索值并将其设置为字段(
f.set(对象,值)
)。使用这种方法,不需要像
USER\u NAME
这样的常量

编辑1:如果性能是一个问题,您当然可以一次性地将所有这些字段收集到某个集合中,但瓶颈仍然是必须为每个可能的字段尝试
httpRequest.getParameter()
。没有特定于反射方法的内容

编辑2:在“更好”的语言中,可以使用类型检查语法来检索
字段
实例,例如imagine(非Java):


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

,我不明白您想要实现什么。您可以给出一些示例吗?您只能从类(其
private
)中引用字段
userName
,也不能从
静态
上下文中引用。但是您可以提供一个getter方法。
User.User\u NAME
可以从任何地方访问静态字段。因此,您的类当然可以使用静态值作为自己的名称:
this.userName=User.User\u name
。我已经编辑了这篇文章。感谢前面提到的,这是供mongo java驱动程序POJO api使用的。在这个api中,java类字段名也将用作mongo文档字段名。您所说的自动生成是什么意思?是否生成源代码(
*.java
)或字节码(
*.class
)?注意,Java编译器内联常量(例如,在您的示例中,
User.User\u NAME
的每次使用都被编译为
“userName”
)。因此,如果您更改常量的值,您就必须重新编译引用该常量的所有Java类
Field f = User::userName;