如何将字符串参数从一组允许值传递给函数
How to pass a String parameter to a function from a set of allowed values
我正在制作自己的 Java class 调用 SelectRequestBuilder
以便轻松创建 SQL 请求。有一个函数 addColumnToSelect
必须将列名作为参数。问题是我想确保用户指定的列名在 table 中,他想从中获取 select 信息。
所以我认为参数 column_name
的类型应该是 enum
像这样:
public enum USER_COLUMN {
ID("id"),
USERNAME("username"),
PASSWORD("password"),
private final String name;
USER_COLUMN(String name) {this.name = name;}
@Override
public String toString() {
return name;
}
}
然后,在我的函数中我可以获得列名,并且我可以确保作为参数传递的列名是有效的。
然而,当我希望能够将此 class 不仅扩展到 users
table,而且扩展到每个 table 时,我遇到了困难。我的意思是,例如,我的 SelectRequestBuilder
必须能够 select 来自其他 table genders
的值。
它带来麻烦的原因是我的函数不能再使用类型为 USER_COLUMN
的参数 column_name
因为它仅适用于 users
table.
最后,我的解决方案是这样的:
private void addColumnToSelect(USER_COLUMN col) {
addColumnToSelect(col.toString());
}
private void addColumnToSelect(GENDER_COLUMN col) {
addColumnToSelect(col.toString());
}
private void addColumnToSelect(ROLE_COLUMN col) { // Role is an other table
addColumnToSelect(col.toString());
}
private void addColumnToSelect(String col_name) {...}
但是这个解决方案并不令人满意,因为我必须为数据库中的每个 table 创建一个其他函数。这就是为什么我问你这个问题,我希望你能帮助找到一个更令人满意的解决方案! :)
枚举可以实现接口,你可以利用它来发挥你的优势:
interface DatabaseColumn {
String columnName();
}
enum UserColumns implements DatabaseColumn {
ID("id"),
USERNAME("username"),
PASSWORD("password");
private final String name;
UserColumns(String name) {
this.name = name;
}
@Override public String columnName() {
return name;
}
}
那么其他枚举也可以实现相同的接口,你的签名就变成了
private void addColumnToSelect(DatabaseColumn col) {
}
我正在制作自己的 Java class 调用 SelectRequestBuilder
以便轻松创建 SQL 请求。有一个函数 addColumnToSelect
必须将列名作为参数。问题是我想确保用户指定的列名在 table 中,他想从中获取 select 信息。
所以我认为参数 column_name
的类型应该是 enum
像这样:
public enum USER_COLUMN {
ID("id"),
USERNAME("username"),
PASSWORD("password"),
private final String name;
USER_COLUMN(String name) {this.name = name;}
@Override
public String toString() {
return name;
}
}
然后,在我的函数中我可以获得列名,并且我可以确保作为参数传递的列名是有效的。
然而,当我希望能够将此 class 不仅扩展到 users
table,而且扩展到每个 table 时,我遇到了困难。我的意思是,例如,我的 SelectRequestBuilder
必须能够 select 来自其他 table genders
的值。
它带来麻烦的原因是我的函数不能再使用类型为 USER_COLUMN
的参数 column_name
因为它仅适用于 users
table.
最后,我的解决方案是这样的:
private void addColumnToSelect(USER_COLUMN col) {
addColumnToSelect(col.toString());
}
private void addColumnToSelect(GENDER_COLUMN col) {
addColumnToSelect(col.toString());
}
private void addColumnToSelect(ROLE_COLUMN col) { // Role is an other table
addColumnToSelect(col.toString());
}
private void addColumnToSelect(String col_name) {...}
但是这个解决方案并不令人满意,因为我必须为数据库中的每个 table 创建一个其他函数。这就是为什么我问你这个问题,我希望你能帮助找到一个更令人满意的解决方案! :)
枚举可以实现接口,你可以利用它来发挥你的优势:
interface DatabaseColumn {
String columnName();
}
enum UserColumns implements DatabaseColumn {
ID("id"),
USERNAME("username"),
PASSWORD("password");
private final String name;
UserColumns(String name) {
this.name = name;
}
@Override public String columnName() {
return name;
}
}
那么其他枚举也可以实现相同的接口,你的签名就变成了
private void addColumnToSelect(DatabaseColumn col) {
}