相关疑难解决方法(0)

检查"get"调用链是否为null

假设我想执行以下命令:

house.getFloor(0).getWall(WEST).getDoor().getDoorknob();
Run Code Online (Sandbox Code Playgroud)

为了避免NullPointerException,我必须在以下情况下执行以下操作:

if (house != null && house.getFloor(0) && house.getFloor(0).getWall(WEST) != null
  && house.getFloor(0).getWall(WEST).getDoor() != null) ...
Run Code Online (Sandbox Code Playgroud)

是否有一种方法或已经存在的Utils类更优雅地执行此操作,让我们说类似下面的内容?

checkForNull(house.getFloor(0).getWall(WEST).getDoor().getDoorknob());
Run Code Online (Sandbox Code Playgroud)

java null nullpointerexception

36
推荐指数
5
解决办法
1万
查看次数

35
推荐指数
6
解决办法
1万
查看次数

在异常被捕获错设计后返回null

我总是遇到同样的问题,当在具有非void返回值的函数中捕获异常时,我不知道要返回什么.以下代码段说明了我的问题.

public Object getObject(){
  try{
    ...
    return object;
  }
  catch(Exception e){
    //I have to return something here but what??
    return null; // is this a bad design??
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 返回null设计不好吗?
  • 如果是这样,什么被视为更清洁的解决方案?

谢谢.

java exception return-value

29
推荐指数
4
解决办法
1万
查看次数

如何在getter链中跟踪NullPointerException

如果我在这样的调用中得到NullPointerException:

someObject.getSomething().getSomethingElse().
    getAnotherThing().getYetAnotherObject().getValue();
Run Code Online (Sandbox Code Playgroud)

我得到一个相当无用的异常文本,如:

Exception in thread "main" java.lang.NullPointerException
at package.SomeClass.someMethod(SomeClass.java:12)
Run Code Online (Sandbox Code Playgroud)

我发现很难找到实际上调用returend null,经常发现自己将代码重构为这样的东西:

Foo ret1 = someObject.getSomething();
Bar ret2 = ret1.getSomethingElse();
Baz ret3 = ret2.getAnotherThing();
Bam ret4 = ret3.getYetAnotherOject();
int ret5 = ret4.getValue();
Run Code Online (Sandbox Code Playgroud)

然后等待更具描述性的NullPointerException,告诉我要查找哪一行.

你们中的一些人可能认为连接getter是一种糟糕的风格,无论如何都应该避免,但我的问题是:我可以在不更改代码的情况下找到错误吗?

提示:我正在使用eclipse,我知道调试器是什么,但我无法弄清楚如何将它应用于问题.

我对答案的结论是:
有些答案告诉我,我不应该一个接一个地连接吸气剂,一些答案显示我如何调试我的代码,如果我不赞成这个建议.

我已经接受了一个答案,这个答案让我知道什么时候连接吸气剂:

  • 如果他们不能返回null,只要你喜欢就链接它们.不需要检查!= null,无需担心NullPointerExceptions(请注意链接仍然是demeter的法则,但我可以忍受)
  • 如果它们可能返回null,则不要永远不会链接它们,并对每个可能返回null的值执行空值检查

这使得对实际调试的任何好建议毫无用处.

java debugging getter nullpointerexception

26
推荐指数
4
解决办法
7765
查看次数

如何管理无效检查的冲击?

通常,在编程中我们会遇到null检查显示特别大的情况.我说的是:

if (doc != null)
{
  if (doc.Element != null)
  {
    ... and so on
  }
  else
    throw new Exception("Element cannot be null");
} else {
  throw new Exception("document cannot be null");
}
Run Code Online (Sandbox Code Playgroud)

基本上,整个事情变成了一个难以理解的噩梦,所以我想知道:有没有更简单的方法来描述我上面要做的事情?(除了空检查,我string.IsNullOrEmpty不时会得到类似的东西.)

接受的答案:我接受了具有此链接的答案,因为所描述的方法具有创新性,正是我想要的.谢谢肖恩!

.net c#

22
推荐指数
4
解决办法
2408
查看次数

如何防止等于之前的空检查

我觉得这样的东西在equals方法上很烦人和丑陋:

if (field == null)
{
    if (other.field != null)
        return false;
}
else if ( ! field.equals(other.field))
    return false;
Run Code Online (Sandbox Code Playgroud)

在C#中,我可以做到这一点:

if( ! Object.Equals(field, other.field))
    return false;
Run Code Online (Sandbox Code Playgroud)

在Java中是否有类似的东西,或者如果是这样的话,首选的方法是什么?

java equals code-cleanup

18
推荐指数
3
解决办法
2万
查看次数

android NullPointerException在updateLocaleListFromAppContext中崩溃

我在PlayStore上上传了一个应用,并从android.app.ActivityThread.updateLocaleListFromAppContext上遇到java.lang.NullPointerException崩溃

我尝试了很多在线搜索,以检查此错误可能来自何处。我不是专门针对代码中的任何内容使用此方法调用的。

java.lang.NullPointerException: 
  at android.app.ActivityThread.updateLocaleListFromAppContext (ActivityThread.java:5892)
  at android.app.ActivityThread.handleBindApplication (ActivityThread.java:6127)
  at android.app.ActivityThread.access$1200 (ActivityThread.java:240)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1797)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7076)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)
Run Code Online (Sandbox Code Playgroud)

如果有人知道解决方案,或者我可以在哪里开始解决此问题,请提供帮助。

android google-play

14
推荐指数
1
解决办法
528
查看次数

如何检查字符串数组是空的还是null的android?

我是java的新手.我无法检查是否为空.你能告诉我这件事吗?我有没有元素的字符串数组.

我试过这段代码

String[] k = new String[3];
if(k==null){
    System.out.println(k.length);
}
Run Code Online (Sandbox Code Playgroud)

java android

13
推荐指数
2
解决办法
8万
查看次数

只有当它不为空时,是否有执行某些操作的快捷方式?

我发现自己经常写这个陈述

MyObject myObject = something.getThatObject();
if( myObject !=null &&
    myObject .someBooleanFunction()){

}
Run Code Online (Sandbox Code Playgroud)

为了防止空指针异常.在Java中有这样的捷径吗?我在想myObject..someBooleanFunction()什么?

java

12
推荐指数
1
解决办法
3983
查看次数

如何避免写代码如"XXX!= null"或"XXX!= null || XXX.isEmpty"

我正在编写查询数据库以获取数据的代码.有些类由Lists 组成,但有时候列表或其他属性无法启动且它们的值是null,所以我需要编写list!=null || list.isEmpty或者attribute != null,在我可以使用该属性之前.

不幸的是,很容易忘记它,而且我真的认为每次操作属性时都这样做很难看.我将编写一些代码来解释它.

public class SpotVo {
    private Double avg;

    private String brief;

    private ArrayList<HotelVo> hotels;

    private int id;

    private ArrayList<byte[]> images;

    private AddressVo location;

    private String name;

    private ArrayList<RestaurantVo> restaurants;
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这个类中有一些列表和其他属性,可以都是null空的,我可以做些什么来避免它吗?

java database-design

11
推荐指数
1
解决办法
4986
查看次数