Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 检查NullPointerException、正确性或个人信念?_Java - Fatal编程技术网

Java 检查NullPointerException、正确性或个人信念?

Java 检查NullPointerException、正确性或个人信念?,java,Java,在我的代码中,我对null进行了大量检查,这样我就不会得到NullPointerException通常我只是这样做: if(variable != null){ //do something with the variable } 以下是更好的方式,还是只是一个问题或个人信仰 if( !variable.equals(null) ){ //do something with the variable } 有没有更有效的方法来进行检查 顺便说一句,我已经做了我的研究,但我似乎找

在我的代码中,我对null进行了大量检查,这样我就不会得到NullPointerException通常我只是这样做:

if(variable != null){
    //do something with the variable
}
以下是更好的方式,还是只是一个问题或个人信仰

if( !variable.equals(null) ){
    //do something with the variable
}
有没有更有效的方法来进行检查

顺便说一句,我已经做了我的研究,但我似乎找不到具体的证据来证明这两点

这不是重复的,最好的答案是你要么使用Assert,它不能用来运行代码,而只是显示一条消息,要么实际抛出我也不想要的异常。这篇文章是针对同一主题的不同问题

 if(!variable.equals(null) ){
     //do something with the variable
 }
若变量为空,则发生NPE。第一种方法要好得多

编辑: 使用可选选项: 考虑一下你有人对象,想要得到薪水。不幸的是,年龄可以为空-在这种情况下,您需要默认值。您可以执行整数salary=Optional.ofNullableperson.getSalary.orElse2000。如果工资为空,它将从person或2000返回salarty

若变量为空,则发生NPE。第一种方法要好得多

编辑: 使用可选选项:
考虑一下你有人对象,想要得到薪水。不幸的是,年龄可以为空-在这种情况下,您需要默认值。您可以执行整数salary=Optional.ofNullableperson.getSalary.orElse2000。如果工资为空,它将从person或2000返回salarty。

有两种方法:

public void calculate(Class variable) {
    Assert.notNull(variable, "variable was null");
    //calculations
}
//and
if (variable == null) {
    //bad
} else {
    calculate(variable);
}
第二种是最常见的。如果变量是字符串,则考虑使用Guava. String UTILSL,使用它的String ISBLIN方法,检查字符串为null还是

总结:

if (variable == null) {
    //bad
} else {
    //good
}
以上是标准方法。更好的办法是:

private boolean isNull(Class variable) {
    return variable == null;
}

if (isNull(variable)) {

} else {

}

有两种方法:

public void calculate(Class variable) {
    Assert.notNull(variable, "variable was null");
    //calculations
}
//and
if (variable == null) {
    //bad
} else {
    calculate(variable);
}
第二种是最常见的。如果变量是字符串,则考虑使用Guava. String UTILSL,使用它的String ISBLIN方法,检查字符串为null还是

总结:

if (variable == null) {
    //bad
} else {
    //good
}
以上是标准方法。更好的办法是:

private boolean isNull(Class variable) {
    return variable == null;
}

if (isNull(variable)) {

} else {

}

我过去总是调用下面的方法来检查nullpointer异常

public static boolean isAvailable(Object data) {
        return ((data!=null) && (data.toString().trim().length() > 0));
    } 

我过去总是调用下面的方法来检查nullpointer异常

public static boolean isAvailable(Object data) {
        return ((data!=null) && (data.toString().trim().length() > 0));
    } 

正如其他人已经说过的,变体

if(!variable.equals(null))
当变量为null时,可以对NPE本身进行修改。此外,您必须确保equals方法对于您使用的所有对象类型也是空安全的。因此,如果您确实需要检查,请使用==

至于更好的解决方案,我们将基于这里的观点:我认为这种接受的空检查是脆弱软件和次优接口定义的标志。我目前越来越多地尝试使用javax.validation注释@NotNull来强化我的接口,并摆脱所有这些运行时检查:

private @NotNull String getName() {...} // guaranteed not to return null
...
if(getName() == null) { // superfluos, your IDE gives a shout if configurd correctly
   ...
}
。。。试一试:

编辑作为注释的答案,因为我需要代码格式:

下面是我当前eclipse设置中的完整剪切粘贴示例:

package stuff;

import javax.validation.constraints.NotNull;

public class Try3 {
   public @NotNull String getName() { return ""; }

   public void test() {
      if(getName() == null)
         System.out.println("Cannot happen due to contract");
   }
}

确保导入的类型确实是javax.validation.constraints.NotNull,因为其他框架也有NotNull注释,可以用不同的方式定义。对于eclipse,还必须在JavaCompiler/Errors/Warnings下的项目设置中选中Enable annotation-based null analysis,并自定义要使用的注释,因为eclipse默认为一些自制的注释。在同一设置页面中选中“使用默认注释”复选框后,可以通过链接“配置”访问自定义。希望有帮助

正如其他人已经说过的,变体

if(!variable.equals(null))
当变量为null时,可以对NPE本身进行修改。此外,您必须确保equals方法对于您使用的所有对象类型也是空安全的。因此,如果您确实需要检查,请使用==

至于更好的解决方案,我们将基于这里的观点:我认为这种接受的空检查是脆弱软件和次优接口定义的标志。我目前越来越多地尝试使用javax.validation注释@NotNull来强化我的接口,并摆脱所有这些运行时检查:

private @NotNull String getName() {...} // guaranteed not to return null
...
if(getName() == null) { // superfluos, your IDE gives a shout if configurd correctly
   ...
}
。。。试一试:

编辑作为注释的答案,因为我需要代码格式:

下面是我当前eclipse设置中的完整剪切粘贴示例:

package stuff;

import javax.validation.constraints.NotNull;

public class Try3 {
   public @NotNull String getName() { return ""; }

   public void test() {
      if(getName() == null)
         System.out.println("Cannot happen due to contract");
   }
}
确保导入的类型确实是javax.validation.constraints.NotNull,因为其他框架也有NotNull注释,可以用不同的方式定义。对于eclipse,还必须在JavaCompiler/Errors/Warnings下的项目设置中选中Enable annotation-based null analysis,并自定义要使用的注释,因为eclipse默认为一些自制的注释。在同一设置页面中选中“使用默认注释”复选框后,可以通过链接“配置”访问自定义。希望有帮助

或者您可以使用Java 8

非常好的例子都在上面

可选通常用于lambdas中的功能性操作。

或者您可以使用Java8

非常好的例子都在上面



可选选项通常用于lambdas中的功能性操作。

第二个选项可能会更好吗?当变量为时,它将抛出NullPointerExceptionnull@cricket_007这是真的,但我的目的是,表明我打算使用。等式我认为这里的实际解决方案可能取决于您在找到null或不找到null时希望如何处理该值。例如,我总是喜欢正确而不是个人信念。特别是其他人的个人信仰。第二种信仰的可能复制品如何更好?当变量为时,它将抛出NullPointerExceptionnull@cricket_007这是真的,但我的目的是,表明我打算使用。等式我认为这里的实际解决方案可能取决于您在找到null或不找到null时希望如何处理该值。例如,我总是喜欢正确而不是个人信念。特别是其他人的个人信仰。谢谢你的回答,但是有没有比第一个更好的方法呢?同意-你应该使用这个ifvariable!=空{}没有更好的方法来检查某个内容是否为空。基于您的需要,您可以考虑使用Java8中的可选选项,或者只是尝试在代码中不传递空值。@拜拜,我尽量不这样做,但您永远不知道^ ^是否可以提供一个您提到的可选的示例?不幸的是,年龄可以为空-在这种情况下,您需要默认值。您可以执行整数salary=Optional.ofNullableperson.getSalary.orElse2000。如果薪资为空,它将从person或2000返回salarty。感谢您的回答,但是是否有比第一个更好的方法来执行此操作?同意-您应该使用此ifvariable!=空{}没有更好的方法来检查某个内容是否为空。基于您的需要,您可以考虑使用Java8中的可选选项,或者只是尝试在代码中不传递空值。@拜拜,我尽量不这样做,但您永远不知道^ ^是否可以提供一个您提到的可选的示例?不幸的是,年龄可以为空-在这种情况下,您需要默认值。您可以执行整数salary=Optional.ofNullableperson.getSalary.orElse2000。如果工资为空,它将从person或2000返回salarty。可以使用断言返回salarty。我的意思是运行一些代码,但不显示消息?当变量为null时,它只会抛出异常,当变量为null时,它会抛出异常。所以它不能在条件if-else中使用statements@hedgehog检查我的更新。一个用于使变量绝对不会为空。另一个应在假定notNull的计算之前使用。可以使用带有Assert的一个。我的意思是运行一些代码,但不显示消息?当变量为null时,它只会抛出异常,当变量为null时,它会抛出异常。所以它不能在条件if-else中使用statements@hedgehog检查我的更新。一个用于使变量绝对不会为空。另一个应该在假设notNull.hmmm可能的答案的计算之前使用,但我认为它没有效率,因为如果您需要其他您无法配置的情况控制。。。。谢谢你的回答,但我认为这不是很有效,因为如果你需要其他你无法配置的情况控制。。。。谢谢,虽然我确实尝试了您推荐的方法,但是当尝试将@NotNull添加到方法中时,我得到了一个警告,该位置不允许使用@NotNull注释。。。。。我的方法和你的一样,private@NotNull String getStr{return;}出于某种原因,我不断出错,IDE也不断要求用@com.esotericsoftware.kryo.NotNull更改导入如果它是maven项目,则添加依赖项javax.validation.validation-api 1.1.0.Final-否则,检查您从何处获得该库。我确实尝试了您建议的方法,但在尝试将@NotNull添加到方法时,我得到了一个错误消息,即该位置不允许使用批注@NotNull。。。。。我的方法和你的一样,private@NotNull String getStr{return;}出于某种原因,我不断出错,IDE也不断要求用@com.esotericsoftware.kryo.NotNull更改导入如果它是maven项目,则添加依赖项javax.validation.validation-api 1.1.0.Final-否则,检查你从哪里得到那个图书馆。