将Java类注释为安全引用比较
我有一个multiton类,所以我知道给定一个特定的键,同一个类永远不会有两个实例存在。这意味着,不是:将Java类注释为安全引用比较,java,intellij-idea,equals,equality,multiton,Java,Intellij Idea,Equals,Equality,Multiton,我有一个multiton类,所以我知道给定一个特定的键,同一个类永远不会有两个实例存在。这意味着,不是: if (someObject.equals(anotherObject)) …这样做对我来说是安全的: if (someObject == anotherObject) 这个类也是final,所以我知道与多态性相关的任何内容都不会导致比较问题 IDEA尽职尽责地告诉我,直接比较两个实例是有风险的,我应该使用.equals(),但我知道在这种情况下不是这样的。是否有一些注释可以应用到我的类
if (someObject.equals(anotherObject))
…这样做对我来说是安全的:
if (someObject == anotherObject)
这个类也是final
,所以我知道与多态性相关的任何内容都不会导致比较问题
IDEA尽职尽责地告诉我,直接比较两个实例是有风险的,我应该使用.equals()
,但我知道在这种情况下不是这样的。是否有一些注释可以应用到我的类中,以指导IDEA、潜在的其他编辑器以及更重要的其他用户,在我的类的实例上进行平等性的直接引用比较是安全的
我知道我可以告诉IDEA取消警告,但我必须对这两种类型或全局进行每次比较,这两种方法都不是一个好主意。另外,更重要的是,我要让我的类的用户知道它比
.equals()
更安全、更快,甚至比.equals()更可取(说服我不是这样)。IntelliJ inspection有一个选项“在只有私有构造函数的类型的对象之间忽略“==”。如果我理解正确,启用此选项将关闭案例中的突出显示
IntelliJ IDEA目前不可能忽略基于注释的比较。哦,序列化或其他恶作剧不应该在这里应用。这个对象只是由我自己构造的,而不是通过反序列化等其他方式。这是一个GWT应用程序,也意味着任何与多线程相关的东西都不适用。我将在这里尝试为.equals
辩护:如果你刚刚有。equals
引用了引用等式,它应该优化为=
,用户不必记住,有些对象可以使用==
,有些则不行。他们可以在任何地方使用.equals
,它的性能将与=
一样好。很好!你应该已经对这些事情很小心了。按计划工作。NullPointerException
是在不应该存在null时传递null的正确结果。确定。这就是使用Objects.equals(a,b)
,其中Objects
是java.util.Objects
。I+1@LouisWasserman:为了安全起见,您可以添加只调用super的equals的最终实现(或者执行ref-equality)并防止被最终的子类重写。感谢您提供的配置建议。是否有一种方法可以向类中添加一些元数据,以便使用Eclipse或其他编辑器的人也知道比较是安全的?对于通用文本编辑器,没有方法向类定义中添加任何元数据,以便类的用户可以看到它。至于Eclipse,我对它还不够熟悉,无法告诉您任何具体情况。