gpt4 book ai didi

java - 如何将一组允许值中的字符串参数传递给函数

转载 作者:行者123 更新时间:2023-12-02 01:24:21 26 4
gpt4 key购买 nike

我正在创建自己的 Java 类,名为 SelectRequestBuilder,以便轻松创建 SQL 请求。有一个函数 addColumnToSelect 必须将列名作为参数。问题是我想确保用户指定的列名位于他想要从中选择信息的表中。

所以我认为参数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;
}
}

然后,在我的函数中,我可以获得列名称,并且我将确保作为参数传递的列名称是有效的。

但是,当我希望能够将此类不仅扩展到 users 表而且扩展到每个表时,我陷入了困境。我的意思是,我的 SelectRequestBuilder 必须能够从其他表 genders 中选择值。它带来麻烦的原因是我的函数无法再采用 USER_COLUMN 类型的参数 column_name,因为它仅适用于 users 表。

最后,我的解决方案如下:

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) {...}

但是这个解决方案并不令人满意,因为我必须为数据库中的每个表创建一个其他函数。这就是我问你这个问题的原因,我希望你能帮助找到更满意的解决方案! :)

最佳答案

枚举可以实现接口(interface),您可以利用它来发挥自己的优势:

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;
}
}

然后其他枚举可以实现相同的接口(interface),并且您的签名将变为

private void addColumnToSelect(DatabaseColumn col) {

}

关于java - 如何将一组允许值中的字符串参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57596310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com