public class MyClass extends Activity {
public static final String DEFAULT_ID = "def";
public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));
private boolean isDefault(String currentId) {
Log.v(TAG,"isdefault("+currentId+") = " + DEF_IDS.contains(currentId));
return DEF_IDS.contains(currentId);
}
}
在日志中:
isdefault(profile0) = true
WTF?如果DEF_IDS不包含“profile0”,为什么它说它包含?
答案 0 :(得分:0)
错误不在您发布的代码中。以下产生预期结果。
public static final String DEFAULT_ID = "def";
public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));
private static boolean isDefault(String currentId) {
return DEF_IDS.contains(currentId);
}
private void test(String def) {
System.out.println("isDefault(" + def + ") = " + isDefault(def));
}
public void test() {
test("def");
test(DEFAULT_ID);
test("NOT");
}
通过打印
isDefault(def) = true
isDefault(def) = true
isDefault(NOT) = false
答案 1 :(得分:0)
执行下面的代码,它给了我正确的结果 问题似乎是你使用静态的LinkedHashSet并且它将保留以前的值,直到你不会明确地清除它,即只初始化一次。
添加更多详细信息或关闭您的问题,因为它一点也不清楚,并且不提供有关您使用此代码的具体方式的完整背景。
public static final String DEFAULT_ID = "def";
public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));
public static void main(String[] args){
isDefault("profile0");
}
private static boolean isDefault(String currentId) {
System.out.println("isdefault("+currentId+") = " + DEF_IDS.contains(currentId));
return DEF_IDS.contains(currentId);
}
输出: - isdefault(profile0)= false