以通用方式将枚举与集合绑定

时间:2014-10-16 09:28:53

标签: java binding enums

情况

我正在对我正在处理的一些代码进行一些重构。

我有一个bean集合(使用Hibernate从数据库中检索但它在这里不相关)。这些bean看起来像这样(为了演示,模型已被简化):

public class MyBean()
{
    private int id;
    private String key;
    private String label;

    // Getters and setters
}

它们存储在Map<Integer, MyBean>中,其中密钥为MyBean id。

另一方面,我有一个enum,来自外部lib,不可编辑。它看起来像这样:

public enum ExternalEnum
{
    FIRST_VALUE("FirstValue"),
    SECOND_VALUE("SecondValue"),
    THIRD_VALUE("ThirdValue");

    // Constructor and getter
}

目前,基本上,绑定是这样完成的:

Map<Integer, MyBean> myBeans = retrieveFromDBThroughDAO();
ExternalEnum eeValue = fetchValueFromSomewhere();

switch (eeValue)
{
    case FIRST_VALUE:
        return myBeans.get(0);

    case SECOND_VALUE:
        return myBeans.get(1);

    case THIRD_VALUE:
        return myBeans.get(2);

    default: // In case of an unexpected modification of the enum
        return myBeans.get(0);

    // I know, case FIRST_VALUE is useless but it's for being clearer
}

这里的问题

  1. 绑定是硬编码的,每次修改都意味着新的构建
  2. 这是一种丑陋,多余的
  3. 我知道可以用更好的方式完成
  4. 我的想法

    我在考虑将绑定外包在像

    这样的属性文件中
    my.enum.binding.first_value=0
    my.enum.binding.second_value=1
    my.enum.binding.third_value=2
    my.enum.binding.default=0
    

    并以通用方式阅读。

    我的问题

    您如何看待我的解决方案?你认为它可以通过其他方式改进吗?

    谢谢你们。

1 个答案:

答案 0 :(得分:0)

那么你可以创建一个由将处理Enum的retrieveFromDBThroughDAO()返回的自定义类,它的映射方式仍然可以通过外部配置完成。

但是,这将集中所有关于如何将枚举映射到该类的ID的变化。