Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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_Coding Style - Fatal编程技术网

Java 比较常量等于对象或对象等于常量

Java 比较常量等于对象或对象等于常量,java,coding-style,Java,Coding Style,遵循Java,他们说我们需要对已知字符串常量调用.equals,而不是未知变量 String string = new Test().getString(); // always compare like this, this will never throw NPE System.out.println("CONSTANT.equals(string):"+CONSTANT.equals(string)); System.out.println("Comparision like string

遵循Java,他们说我们需要对已知字符串常量调用
.equals,而不是未知变量

String string = new Test().getString();
// always compare like this, this will never throw NPE
System.out.println("CONSTANT.equals(string):"+CONSTANT.equals(string));
System.out.println("Comparision like string.equals(CONSTANT) may throw NullPointerException");
// next statement will throw NPE
System.out.println("string.equals(CONSTANT):"+string.equals(CONSTANT));
那么已知变量如何?我们是否应该继续这样做

例如,如果我从服务器接收到一个对象,服务器将通知此对象从不null。
如果我想将这个对象与常数进行比较

// CONS: it may return NPE if server return null (for example server do wrong) => app crash
// PRO: when we read this code, we have a mindset that object never null, if it null it is the server bug
object.equals(CONSTANT)

// CONS: When we read this code, we never know why and when object == null so it confusing. 
// It not return NPE so code still running and we may have some problem with UI or logic
// PRO: it never return NPE
CONSTANT.equals(object)
如有任何建议,将不胜感激。对我来说,对于已知变量,我更喜欢
object.equals(CONSTANT)
,但我的团队不喜欢

更新我想

CONSTANT.equals(object)
同样

try{
   object.equals(CONSTANT)
catch(NullPointerException ex){
   // don't handle or explain anything
}

坚持常量。等于(对象)。特别是因为,什么是已知变量?你怎么能肯定知道呢?由于特殊情况,它仍然可以为空。这主要是基于意见的。在比较之前,我会检查null并处理该情况。因为Java允许空值,所以使用它们是个好主意。@PhanVanLinh我同意这是基于观点的,但让我同意你的观点:-)有些人只是不想看到NPE,不管怎样,他们把它当作瘟疫一样对待。例如,当他们可以得到NoTouchElementException而不是基本相同的NullPointerException时,他们会强迫使用Optional。这确实是一个个案的事情。在知道变量不应为null的上下文中,不应使用CONSTANT.equals(string)等误导性技巧。如果案例不符合假设,那么获得NPE是更好的方法。这是一种快速失败的方法。@PhanVanLinh只是一个让您的团队高兴的建议-尝试建议使用断言(例如Spring断言方法或您自己的,但不要使用java内置断言,因为它们在大多数环境中通常是禁用的)。在这种情况下,您只需在构造函数或方法中检查变量一次,然后使用它而无需特殊技巧。@Ruslan问题指出,对象是由服务器提供的。因此,您可以从外部系统获取数据。您必须期望从中提供所有可能的值(也为null)。因此,如果一个外部服务器声明,它永远不会提供null,但仍然向您发送null,这是一个Bug,是的,但在服务器中,而不是在您的应用程序中。关于robustnes,您应该进行空检查,而不是依赖于来自外部系统的语句。但是它本身必须在服务器端进行分析和修复。请坚持使用常量.equals(对象)。特别是因为,什么是已知变量?你怎么能肯定知道呢?由于特殊情况,它仍然可以为空。这主要是基于意见的。在比较之前,我会检查null并处理该情况。因为Java允许空值,所以使用它们是个好主意。@PhanVanLinh我同意这是基于观点的,但让我同意你的观点:-)有些人只是不想看到NPE,不管怎样,他们把它当作瘟疫一样对待。例如,当他们可以得到NoTouchElementException而不是基本相同的NullPointerException时,他们会强迫使用Optional。这确实是一个个案的事情。在知道变量不应为null的上下文中,不应使用CONSTANT.equals(string)等误导性技巧。如果案例不符合假设,那么获得NPE是更好的方法。这是一种快速失败的方法。@PhanVanLinh只是一个让您的团队高兴的建议-尝试建议使用断言(例如Spring断言方法或您自己的,但不要使用java内置断言,因为它们在大多数环境中通常是禁用的)。在这种情况下,您只需在构造函数或方法中检查变量一次,然后使用它而无需特殊技巧。@Ruslan问题指出,对象是由服务器提供的。因此,您可以从外部系统获取数据。您必须期望从中提供所有可能的值(也为null)。因此,如果一个外部服务器声明,它永远不会提供null,但仍然向您发送null,这是一个Bug,是的,但在服务器中,而不是在您的应用程序中。关于robustnes,您应该进行空检查,而不是依赖于来自外部系统的语句。但是它本身必须在服务器端进行分析和修复。