如何使对象将数字与特定字符串相关联

时间:2014-05-30 12:15:31

标签: java

我有一个名为skill的对象,用6个int值初始化。

我正在尝试使该对象将该数字与特定字符串相关联,因此该对象将在内部用特定字符串替换接收到的int。

我想要的关联示例: 1=disastous, 2=poor, 3=weak ...

我不记得我在java中如何做到这一点,我想它不是枚举的。我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

如果关联是静态的并且已知,请使用枚举。

    public enum Items {
        disastous(1),
        poor(2),
        weak(3);

        int id;
        Items(int id) {
            this.id = id;
        }
    }

答案 1 :(得分:1)

关联数组?

HashMap<Integer,String> map  = new HashMap<>();

将关联放入地图中,并简单地返回map.get(value)

答案 2 :(得分:1)

以下是我在当前项目中的表现。提供所有Stats对于给定数字需要相同的Human Readable值。像魅力一样。

public abstract class AbstractStat implements IStat
{
    private static final Map<Integer, String> hrNames;

    static
    {
        hrNames = new HashMap<Integer, String>();
        hrNames.put(1, "None");
        hrNames.put(2, "Poor");
        hrNames.put(3, "Below Average");
        hrNames.put(4, "Average");
        hrNames.put(5, "Above Average");
        hrNames.put(6, "Good");
    }
}

答案 3 :(得分:1)

通过实现一些帮助方法(即fromInt)来扩展Patrick's answer,你可以使你的枚举更有用:

public enum SkillLevel {    
    DISASTROUS(1, "Disastrous"),
    POOR(2, "Poor"),
    WEAK(3, "Weak");    

    private final int intValue;
    private final String description;        

    private SkillLevel(int intValue, String description) {
        this.intValue = intValue;
        this.description = description;
    }

    public String getDescription() {
        return description;
    }

    public int getIntValue() {
        return intValue;
    }

    public static SkillLevel fromInt(int value) {
        for (SkillLevel level : values()) {
            if (level.getIntValue() == value) {
                return level;
            }
        }        
        throw new IllegalArgumentException("No such level");
    }
}

因此,在您的技能对象中,如果您收到一个int值,您可以这样做:

SkillLevel level = SkillLevel.fromInt(value);

然后,您可以使用以下命令访问字符串值:

level.getDescription();

枚举是这个问题的优雅解决方案,比地图强大得多。如果您的需求增加,您可以向枚举添加更多字段和数据,而地图只能将一个值链接到另一个值。