【发布时间】:2015-12-29 00:40:57
【问题描述】:
我有一个下面的程序,我的枚举值为“2”,但它并没有按照预期的方式工作。任何帮助将不胜感激。
package com.deepak.streams;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import java.util.Map;
public class Demo2 {
public static void main(String[] args) {
if (Scores.scoreMap.containsKey("2")) {
System.out.println("Contains Value");
} else {
System.out.println("Does not contains Value");
}
}
public enum Scores {
PASS(1), FAIL(2), MATRIC(3), PROMOTED(4);
private Integer alias;
private static final Map<Object, Scores> scoreMap;
Scores(Integer iAlias) {
alias = iAlias;
}
static {
final Map<Object, Scores> tmpMap = new HashMap<Object, Scores>();
for(final Scores scores : Scores.values()) {
tmpMap.put(scores.alias, scores);
tmpMap.put(scores.name(), scores);
}
scoreMap = ImmutableMap.copyOf(tmpMap);
}
public Integer getAlias() {
return alias;
}
public static Scores getStudentScoreEnum(Integer intVal) {
return getScores(intVal);
}
public static Scores getStudentScoreEnum(String strVal) {
return getScores(strVal);
}
private static Scores getScores(Object objVal) {
if(null != objVal && !scoreMap.containsKey(objVal)) {
throw new IllegalArgumentException("Unknown Value: " + objVal);
}
return scoreMap.get(objVal);
}
}
}
【问题讨论】:
-
问题不清楚,预期的行为是什么,发生了什么?
-
@Dici - 如果您查看主要方法,我的枚举中显然有键“2”。当我运行它时,它无法显示实际结果,即它没有打印“包含值”。
-
Scores.scoreMap.containsKey(2)
-
您的枚举中有一个整数键 2,您正在查询字符串值“2”。作为 Integer != String,你得到的结果是正确的和预期的