Java 是否只有在不为null时才有执行某项操作的快捷方式?
我发现自己一直在写这份声明Java 是否只有在不为null时才有执行某项操作的快捷方式?,java,Java,我发现自己一直在写这份声明 MyObject myObject = something.getThatObject(); if( myObject !=null && myObject .someBooleanFunction()){ } 以防止出现空指针异常。在Java中有这样的快捷方式吗?我的想法就像myObject..someBooleanFunction()?不,我很确定没有办法比你现有的更短的时间来完成它。如果它是一个对象,就没有办法了。字符串具有isEmp
MyObject myObject = something.getThatObject();
if( myObject !=null &&
myObject .someBooleanFunction()){
}
以防止出现空指针异常。在Java中有这样的快捷方式吗?我的想法就像
myObject..someBooleanFunction()
?不,我很确定没有办法比你现有的更短的时间来完成它。如果它是一个对象,就没有办法了。字符串具有isEmpty()
,但除了您拥有的对象之外,没有内置的方法来检查对象是否为null。这个封闭式问题有一些评论可能会有所帮助:
您可以在类中编写自己的方法来检查null和其他方法,但它必须是静态的,否则您将遇到null指针问题。Java 8有一个称为Optional的东西。更多详细信息请访问:Java 8中的:
static <T> boolean notNull(Supplier<T> getter, Predicate<T> tester) {
T x = getter.get();
return x != null && tester.test(x);
}
if (notNull(something::getThatObject, MyObject::someBooleanFunction)) {
...
}
静态布尔notNull(供应商获取者、谓词测试者){
T x=getter.get();
返回x!=null&&tester.test(x);
}
if(notNull(something::getThatObject,MyObject::someBooleanFunction)){
...
}
如果这种风格对读者来说是新的,那么我们应该记住,完整的函数式编程会更好一些。我认为Java不会。遗憾的是,如果Oracle允许elvis操作符进入Java 7,那该多好。我不认为有什么方法可以在Java中缩短它,但是可以在JVM上运行支持这种功能的语言。Groovy就是一个很好的例子,它的语言特性非常丰富。至于缩短它,请看一下Guava或Scala库中的
可选习惯用法。我相信Scala也有一个简洁的语法,但我不熟悉它。