假设我想执行以下命令:
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) 哪一个更快:
这个
try {
n.foo();
}
catch(NullPointerException ex) {
}
Run Code Online (Sandbox Code Playgroud)
要么
if (n != null) n.foo();
Run Code Online (Sandbox Code Playgroud) 我总是遇到同样的问题,当在具有非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)
所以我的问题是:
谢谢.
如果我在这样的调用中得到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检查显示特别大的情况.我说的是:
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不时会得到类似的东西.)
接受的答案:我接受了具有此链接的答案,因为所描述的方法具有创新性,正是我想要的.谢谢肖恩!
我觉得这样的东西在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中是否有类似的东西,或者如果是这样的话,首选的方法是什么?
我在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)
如果有人知道解决方案,或者我可以在哪里开始解决此问题,请提供帮助。
我是java的新手.我无法检查是否为空.你能告诉我这件事吗?我有没有元素的字符串数组.
我试过这段代码
String[] k = new String[3];
if(k==null){
System.out.println(k.length);
}
Run Code Online (Sandbox Code Playgroud) 我发现自己经常写这个陈述
MyObject myObject = something.getThatObject();
if( myObject !=null &&
myObject .someBooleanFunction()){
}
Run Code Online (Sandbox Code Playgroud)
为了防止空指针异常.在Java中有这样的捷径吗?我在想myObject..someBooleanFunction()什么?
我正在编写查询数据库以获取数据的代码.有些类由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 ×8
android ×2
.net ×1
c# ×1
code-cleanup ×1
debugging ×1
equals ×1
exception ×1
getter ×1
google-play ×1
if-statement ×1
null ×1
return-value ×1
try-catch ×1