我用object != null了很多东西来避免NullPointerException.
有没有一个很好的替代品呢?
例如:
if (someobject != null) {
someobject.doCalc();
}
Run Code Online (Sandbox Code Playgroud)
NullPointerException当不知道对象是否存在时,这避免了a null.
请注意,接受的答案可能已过期,请参阅/sf/answers/167020941/以获取更新的方法.
我有过的快速扫描番石榴API,它提供了新的集合类型(Multimap以及BiMap例如出现有用),我想包括在项目(S)我工作的图书馆.
然而,如果它们没有什么好处并且学习这些功能浪费了宝贵的时间,我也不愿意将这些图书馆包括在内.
您是否已将Guava库包含在项目中并且以任何意外方式证明它有用吗?你将来会一直使用它吗?它的主要优点/节省时间是什么?它隐藏的功能是什么?
我喜欢在这里使用这个方法:
org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2)
Run Code Online (Sandbox Code Playgroud)
唯一的缺点(例如,与Google Guava相比),我无法静态导入该方法.即这没用:
import static org.apache.commons.lang.ObjectUtils.equals;
Run Code Online (Sandbox Code Playgroud)
...因为我的Eclipse编译器在编写时无法正确链接该方法
equals(obj1, obj2);
Run Code Online (Sandbox Code Playgroud)
错误是:
Object类型中的方法equals(Object)不适用于参数(...,...)
这是为什么?如果在任何超类型中存在具有相同名称(但不是相同的签名)的方法,我的静态导入方法是否不适用?这是在JLS中正式指定的吗?还是一些Eclipse编译问题?
UPDATE
这也不起作用:
import static org.apache.commons.lang.ObjectUtils.defaultIfNull;
public class Test {
void test() {
defaultIfNull(null, null);
// ^^ compilation error here
}
void defaultIfNull() {
}
}
Run Code Online (Sandbox Code Playgroud)
javac错误消息:
Test.java:5: defaultIfNull() in Test cannot be applied to (<nulltype>,<nulltype>)
defaultIfNull(null, null);
^
1 error
Run Code Online (Sandbox Code Playgroud)