gpt4 book ai didi

java - Android Studio 2 比较对象和 boolean 编译是否成功?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:15 25 4
gpt4 key购买 nike

我(错误地)在 Android 项目中编写了以下代码。

for (Map<String, Object> occurrence : occurrences) {
if (occurrence.get("cancelled") == true) {
// don't display cancelled events
continue;
}
...

现在,据我了解,应该发生编译器错误,导致 error: incomparable types: Object and boolean,但事实并非如此。它编译成功,并且按照我的预期/Intent 运行。 (确实,此处检索的值始终是装箱的 boolean 值。)

我从来没有注意到这一点,但在我提交代码一段时间后,一位合作者拉到他的系统,尝试编译,并得到了编译错误。

在那之后,我仔细检查以确保,但我的代码肯定使用 == 运算符,即使在清理和重建之后,它仍然可以正常编译。

这是怎么回事?是否有一些设置可以告诉 Android Studio 掩盖这一点?不同版本的java工具链是否允许或不允许这种语法?我已经通过将比较替换为对 .equals 的调用来实现这个特定的示例,但我们需要确保将来当我们编写/编译/测试代码时,它不会随机地在其他人的机器上根本不起作用!

最佳答案

Map 将保存键和值对。在您的代码中,您定义了 Map,这意味着键是 String 类型,并且相应的键将您的保存值作为对象而不是 boolean 值。

如果你想检查 map 中是否存在 key ,那么你必须使用map.containsKey(key)。如果 HashMap 中存在键,则此方法将返回 true。如果你想比较当前元素是否存在,那么你必须使用 get(),该方法将返回 Value 类型。

所以你的代码的最终结论是:

for (Map<String, Object> occurrence : occurrences) {
if (occurrence.get("cancelled")!=null) {
// don't display cancelled events
continue;
}

方法2:

for (Map<String, Object> occurrence : occurrences) {
if (occurrence.containsKey("cancelled")) {
// don't display cancelled events
continue;
}

关于java - Android Studio 2 比较对象和 boolean 编译是否成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com