我有一个名为skill的对象,用6个int值初始化。
我正在尝试使该对象将该数字与特定字符串相关联,因此该对象将在内部用特定字符串替换接收到的int。
我想要的关联示例:
1=disastous, 2=poor, 3=weak ...
我不记得我在java中如何做到这一点,我想它不是枚举的。我怎么能这样做?
答案 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();
枚举是这个问题的优雅解决方案,比地图强大得多。如果您的需求增加,您可以向枚举添加更多字段和数据,而地图只能将一个值链接到另一个值。