gpt4 book ai didi

java - 将对象等同于 boolean 值 - IntelliJ 与 Eclipse

转载 作者:行者123 更新时间:2023-12-01 21:54:25 25 4
gpt4 key购买 nike

我很好奇为什么以下行在 IntelliJ 中运行良好,但在 Eclipse 中显示为错误(均使用 Java 7):

return toolbar.getClientProperty("PrototypeToolbar") == true;

我看到这段代码是我们项目的一部分,起初我认为它不会起作用,因为 getClientProperty()返回 Object我们将其与 boolean 进行比较。然而,对于我们这些使用 IntelliJ 的人来说,它工作得很好,但对于团队中使用 Eclipse 的其他人来说,它显示为错误。

我的猜测是它在技术上可以工作,因为 0 == false可能是 anything not 0 == true 。但是,我不确定为什么一个 IDE 会提示而另一个 IDE 却不会。哪一个是“正确的”?

注意:上面的行用于查找属于旧框架一部分且难以访问的工具栏。此检查用于过滤并查找 PrototypeToolbar 。我已经建议将其从简单地检查是否正确改为使用 instanceof 检查类型。 .

谢谢!

最佳答案

看起来这在 javac 1.7 下是有效的代码,但在 1.8 下则不是。我怀疑这是 javac 中的错误修复。

这不会将 0 视为 false,也不会将任何非 0 视为 true。它有效地做到了这一点:

Object wrapped = true; // Autoboxing
return toolbar.getClientProperty("PrototypeToolbar") == wrapped;

如果 toolbar.getClientProperty(...) 返回相同的引用,则仅返回 true - 例如如果它也被装箱为值 true,或者显式调用 Boolean.valueOf(true)

示例:

// Compiles under 1.7 but not 1.8
public class Test {
public static void main (String args[]) {
Object x = Boolean.valueOf(true);
Object y = new Boolean(true);
System.out.println(x == true); // Prints true
System.out.println(y == true); // Prints false
}
}

我怀疑您的代码应该重构为:

return Boolean.TRUE.equals(toolbar.getClientProperty("PrototypeToolbar"));

如果 getClientProperty() 返回非 boolean 引用、nullfalse,则返回 false >.

关于java - 将对象等同于 boolean 值 - IntelliJ 与 Eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617284/

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