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
。
我正在使用 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
。