使用Java存储和引用常量表的最佳方法

时间:2015-09-16 12:51:37

标签: java

我的数据表如下

      Column1 | Column 2| Colmun3
 ROW1   AAA   | BBB     | CCC
 ROW2   XXX   | YYY     | ZZZ
 ROW3   PPP   | QQQ     | RRR

所有AAA,BBB,CCC,XXX,YYY,ZZZ,PPP,QQQ,RRR将作为常量存储。 所有其他模块中的不同位置都会引用相同的内容。

我想通过调用ROW1.COLUMN1,ROW1.COLMUN2等作为输入来检索常量AAA,BBB等。

哪种Java功能最适合此要求?收藏品,枚举或其他?请提供与上述类似的任何相关示例。

2 个答案:

答案 0 :(得分:1)

用于使用密钥检索数据的最简单的数据结构是Map。

在这种特殊情况下,使用的密钥是一个自定义对象,它包含有关对象和类型的信息。

public class MyKey {
    private String object;
    private String type;

    public MyKey(String object, String type) {   
        this.object = object;
        this.type = type;
    }

    // Redefine equals and hashCode functions
}

重要提示:如果您使用自定义密钥,则需要记住重写hashCode并等于functions

更简单的解决方案是将对象和类型的组合用作键。 我假设你所谓的对象和你所谓的类型是字符串。所以你可以使用

String key = object + type; 

或更好地使用特殊字符

String key = object + "$" + type;

答案 1 :(得分:0)

我喜欢@Davide的回答。另一种选择是使用注释中建议的Map Map,并将其包装在执行所有空检查的另一个类中:

import java.util.HashMap;
import java.util.Map;

public class ReferenceTable {
    public final static String COL1 = "COL1";
    public final static String COL2 = "COL2";
    public final static String COL3 = "COL3";

    public final static String ROW1 = "ROW1";
    public final static String ROW2 = "ROW2";
    public final static String ROW3 = "ROW3";

    private Map<String, Map<String, String>> ref = new HashMap<>();

    {
        put(COL1, ROW1, "AAA");
        put(COL2, ROW1, "BBB");
        put(COL3, ROW1, "CCC");
        // ...
    }

    private void put(String column, String row, String value) {
        Map<String, String> values = ref.get(column);
        if (values == null) {
            values = new HashMap<>();
            ref.put(column, values);
        }
        values.put(row, value);
    }

    public String get(String column, String row) {
        Map<String, String> values = ref.get(column);
        return values == null ? null : values.get(row);
    }
}