java - 如何对对象使用不同的枚举类型来构建具有唯一值的 GUI 滚动列表

标签 java enums

查看了许多与将不同枚举类型传递给方法相关的帖子,但不相信我的具体情况/问题已得到解决。

以下是我建立的Enum Type类(修改为隐藏分类信息):

public class ProjectA_Enums{
    private ProjectA_Enums(){
    }

    public enum TableA_Filter_Sort_Options{
        TIMESTAMP     ("TIMESTAMP", "tbla_timestamp"),
        USER          ("USER",      "tbla_user"),
        SHARE         ("SHARE",     "tbla_share"),
        CONDITION     ("CONDITION", "tbla_condition",
        TERMINAL      ("TERMINAL",  "tbla_terminal");

        private final String filter_name;
        private final String database_column_name;

        private TableA_Filter_Sort_Options(String filter_name,
                                           String database_column_name){
            this.filter_name = filter_name;
            this.database_column_name = database_column_name;
        }

        public String getFilter_name(){
            return filter_name;
        }

        public String getDatabase_column_name(){
            return database_column_name;
        }
    }

    public enum TableB_Filter_Sort_Options{
        TIMESTAMP     ("TIMESTAMP",      "tblb_timestamp"),
        ERROR_CODE    ("ERROR CODE",     "tblb_errcode"),
        ERROR_MESSAGE ("ERROR MESSAGE",  "tblb_errmsg");

        private final String filter_name;
        private final String database_column_name;

        private TableA_Filter_Sort_Options(String filter_name,
                                           String database_column_name){
            this.filter_name = filter_name;
            this.database_column_name = database_column_name;
        }

        public String getFilter_name(){
            return filter_name;
        }

        public String getDatabase_column_name(){
            return database_column_name;
        }
    }
}

现在的情况是这样的:

我想调用类FilterSortDialogDisplay并传递枚举类型TableA_Filter_Sort_OptionsTableB_Filter_Sort_Options来构建和显示一个对话框GUI,其中显示适用的过滤器在滚动 Pane 中。

此类将允许用户选择适用的过滤器来执行数据库查询以及所需的排序顺序。

对于枚举类型TableA_Filter_Sort_Options,显示的过滤器将为TIMESTAMP、USER、SHARE、CONDITION、TERMINAL,对于TableB_Filter_Sort_Options,显示的过滤器将为TIMESTAMP、ERROR CODE、ERROR MESSAGE 。

与每个 Enum 类型值关联的第二个属性是在生成的数据库查询 SQL 中使用的关联数据库表列。我在另一篇文章中看到必须将接收方法的输入参数定义为Class。由于缺乏 Java 知识,我不确定如何编写代码来使用传入的 Enum 类型。

由于我已经使用相同的属性和方法设置了两种枚举类型,因此我希望能够将 FilterSortDialogDisplay 类中的属性转换为适当的枚举类型,然后调用这些方法。

希望枚举类型是用于执行定义的功能的正确构造,因为将存在具有不同数字和过滤器值的其他枚举类型,需要为其生成和显示过滤器排序对话框,而不需要冗余代码基于枚举类型。

提前感谢您提供的任何帮助。

最佳答案

我建议您不要为此使用枚举。从您的描述来看,您似乎想要传递一个包含足够信息的对象,以便对话框显示过滤器信息并生成查询。我建议您定义一个接口(interface),然后为您的各种表创建实现。

解决方案可能类似于:

public interface FilterSortOption {
    Stream<Criteria> getFilterCriteria();
    String generateQuery(Map<Criteria, Value> values);
}

void showDialogAndRunQuery(FilterSortOption option) {
    ....
}

然后你可以定义它的几个实现。如果他们共享代码(因为他们很可能这样做),那么该代码可以进入每个实现委托(delegate)给的单独的类中。该委托(delegate)类可能可能使用枚举来包含列和条件信息。如果您需要,我可以提供有关如何执行此操作的指导。

关于java - 如何对对象使用不同的枚举类型来构建具有唯一值的 GUI 滚动列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33906041/

相关文章:

enums - SystemVerilog 枚举可以为空吗?

java - 无法实例化类 : org. jnp.interfaces.NamingContextFactory

java - 如何通过负载测试优化 JVM & GC

Java 的[输入|输出]流的每个字节的一种方法调用 : a performance problem?

java - 如何将属性文件放置在 Eclipse 中类路径中 .jar 前面的目录中?

ios - 将 Int 传递给枚举并返回一个 String

enums - 如何将 bindgen 生成的 C 风格枚举转换为另一个枚举?

vb.net - 获取泛型的枚举的Integer值

mysql - 将 grails/groovy 枚举映射到 Mysql 枚举

java - 单声道异步异常处理