Eclipse,Java:从静态字符串生成类字段,反之亦然
我正在使用mongo开发JAVA web服务,为了实现mongo JAVA驱动程序POJO api(如Morphia),我建立了如下POJO: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 &&
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;