Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java类注释为安全引用比较_Java_Intellij Idea_Equals_Equality_Multiton - Fatal编程技术网

将Java类注释为安全引用比较

将Java类注释为安全引用比较,java,intellij-idea,equals,equality,multiton,Java,Intellij Idea,Equals,Equality,Multiton,我有一个multiton类,所以我知道给定一个特定的键,同一个类永远不会有两个实例存在。这意味着,不是: if (someObject.equals(anotherObject)) …这样做对我来说是安全的: if (someObject == anotherObject) 这个类也是final,所以我知道与多态性相关的任何内容都不会导致比较问题 IDEA尽职尽责地告诉我,直接比较两个实例是有风险的,我应该使用.equals(),但我知道在这种情况下不是这样的。是否有一些注释可以应用到我的类

我有一个multiton类,所以我知道给定一个特定的键,同一个类永远不会有两个实例存在。这意味着,不是:

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,我对它还不够熟悉,无法告诉您任何具体情况。