我用object != null了很多东西来避免NullPointerException.
有没有一个很好的替代品呢?
例如:
if (someobject != null) {
someobject.doCalc();
}
Run Code Online (Sandbox Code Playgroud)
NullPointerException当不知道对象是否存在时,这避免了a null.
请注意,接受的答案可能已过期,请参阅/sf/answers/167020941/以获取更新的方法.
这可能看起来像一个原始问题,或者可以通过我不知道的简单实用程序库方法来完成。
目的是检查嵌套在两个对象下的布尔字段的值。
private boolean sourceWebsite(Registration registration) {
Application application = registration.getApplication();
if (application == null) {
return true;
}
Metadata metadata = application.getMetadata();
if (metadata == null) {
return true;
}
Boolean source = metadata.getSource();
if (source == null) {
return true;
}
return !source;
}
Run Code Online (Sandbox Code Playgroud)
我知道这可以一次完成if()。if为了可读性,我在这里添加了多个。
有没有一种方法可以简化上面的if语句,并有一个简单的实用工具类返回Boolean source父对象是否为null的值?
有人可以解释一下Optional我们如何避免NullPointerException吗?
Optional<String> op = someFunc()
if(op.isPresent()) {
op.get();
}
String possibleNull = op.get();
Run Code Online (Sandbox Code Playgroud)
这个代码不是很容易出现NullPointerException吗?如果是这样,那么为什么这个代码更受欢迎
String op = someFunc()
if(op != null) {
op.get();
}
String possibleNull = op;
Run Code Online (Sandbox Code Playgroud)
Optional除了帮助我们了解函数是否实际具有返回值之外,还有什么可能带来的好处
我的代码如下:
obj1 = SomeObject.method1();
if (obj1 != null) {
obj2 = obj1.method2();
if (obj2 != null) {
obj3 = obj2.method3();
if (obj3 != null) {
............
return objN.methodM();
}
}
}
....
Run Code Online (Sandbox Code Playgroud)
我有近10步.它似乎非常脆弱且容易出错.有没有更好的方法来检查空链方法?
谢谢.
我正在使用旧版应用程序,在该应用程序中,我经常不得不访问像下面这样嵌套的属性:
a.getB().getC().getD().getE().getF()
Run Code Online (Sandbox Code Playgroud)
问题在于,在任何深度下,该值都可能为空。当然,我可以像这样检查每个深度:
public Optional<F> retrieveValue(A a) {
if(a != null && a.getB() != null && a.getB().getC() != null &&
a.getB().getC().getD() != null &&
a.getB().getC().getD().getE() != null &&
a.getB().getC().getD().getE().getF() != null) {
return Optional.of(a.getB().getC().getD().getE().getF());
} else {
return Optional.empty();
}
}
F existingOrCreated = retrieveValue(a).orElse(new F());
Run Code Online (Sandbox Code Playgroud)
但是我必须在许多地方对许多不同的对象执行此操作,因此这些检查会使代码膨胀。大多数情况下,对象不是非null,但是在少数情况下,对象为null。有没有一种更简洁的方法?我正在使用Java 8,但是无法更新提供的旧代码。
我需要使用对象中 3 个级别的 getter。
response.getServiceError().getErrorCode()
Run Code Online (Sandbox Code Playgroud)
一个或多个对象可能为 NULL。现在,我正在这样做
if (response != null && response.getServiceError() != null && response.getServiceError().getErrorCode() != null && response.getServiceError().getErrorCode().equals("errCode123")) {
//doSomething;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好和/或优雅的方式来构建 if 条件?
让我们想象一下这种情景:3级Meeting,Room, Projector
会议可能设置了一个房间,里面可能有一个投影仪。
现在假设我想知道投影仪的型号是什么。最自然的事情是做类似的事情
Meeting meeting = someMethod();
return meeting.getRoom().getProjector().getModelName();
Run Code Online (Sandbox Code Playgroud)
此代码可以正确返回投影仪的型号名称,不幸的是,此代码也可能导致异常:java.lang.NullPointerException如果包含在根类 Meeting(甚至 Meeting 类)中的类之一为空。
为了防止这个问题,并在最坏的情况下获得一个默认值,我们应该检查每个调用的返回值。
Meeting meeting = someMethod();
if (meeting != null) {
Room room = meeting.getRoom();
if (room != null) {
Projector projector = room.getProjector();
if (projector != null) {
return projector.getModelName;
}
}
}
return "No Projector Exist";
Run Code Online (Sandbox Code Playgroud)
现在的代码非常糟糕。
处理这种避免 NullPointerException 的链式方法调用的最佳方法是什么?
java ×7
null ×3
java-8 ×2
null-check ×2
chain ×1
conditional ×1
if-statement ×1
java-11 ×1
methods ×1
object ×1
optional ×1
refactoring ×1