在下面的代码中,我想跳过空检查。请让我知道替代解决方案。
public class NullCheck {
public static void main(String[] args) {
String str=args[0];
if (null != str) //without using this null check how to avoid null pointer exception
{
System.out.println("Null check");
}
else
{
System.out.println("Null value");
}
}
}
由于
答案 0 :(得分:6)
您可以使用 Yoda Expressions 来避免许多空检查,例如
if ("Hello".equals(str))
"Hello"
,作为文字,永远不会null
,内置的equals
方法会检查str
是否为空。替代str.equals("Hello")
会要求您先检查str
。
有些人发现它们混淆了,并不总是可以相应地安排你的语法。
答案 1 :(得分:3)
我觉得像家庭作业一样吗? 最终老师要你使用Try Catch Block?
try{
//what you want to do when its not null
}
catch (NullPointerException exp){
//what happens if its null
}
尝试在Try块中执行代码,但如果发生NullPointerException,则可以在Catch块中处理它。也许,也许就是那些你想要的东西。
答案 2 :(得分:2)
我在代码中跳过了空检查。无论如何都不会检查null值。
public class NullCheck {
static String str;
public static void main(String[] args) {
}
}
更严重的是,您可以:
static String str
初始化为= "";
(空字符串)并且肯定不会是null
(只需确保没有人可以为其指定空值)!。答案 3 :(得分:0)
另一种替代解决方案是始终将变量初始化为某些内容。对于叮咬,这可能是一个空字符串:String string = "";
。对于集合,如果您想在以后添加它,可以初始化为空集合:Collection<T> collection = Collections.emptyList();
或Collection<T> list = new ArrayList<>()
。
但问题是,在某些时候,您需要查看对象是否为空,因为并非每个对象都有一些默认的安全初始化值:
Scanner scanner = null;
try
{
scanner = new Scanner(...);
...
}
...
finally
{
if(scanner != null) scanner.close();
}
因此,我不认为你完全可以避免进行空检查,但你可以减轻它。
答案 4 :(得分:0)
我不知道你的检查有什么问题,这似乎是一个很好的解决方案,但你可以使用try-catch语句,或者默认值初始化str对象“”并检查空字符串,或者使用断言检查可空的对象。
答案 5 :(得分:0)
简短的回答:你做不到。 答案很长:你可以使用变通方法,这有效地检查if-else是否为null。
有些已经提供了他们的答案,我会给你一个提示(不是真正的答案,因为它实际上反过来): Java 8引入了泛型类:Optional
它在内部持有对象的引用或null。 它给你的是,每当你试图在它所拥有的对象上调用一个方法时,要获得你需要调用get()方法的实际对象,这更有可能提醒你检查是否存在。
只是一小部分样本:
package whatever;
import java.util.Optional;
public class Main(){
public static void main(String[] args) {
Optional<String> a = Optional.empty();
Optional<String> b = Optional.ofNullable(notReallyAString);
Optional<String> c = Optional.of("John Paul II");
if(a.isPresent()) System.out.println("Empty optional, you shouldnt be able to see this");
if(b.isPresent()) System.out.println("Optional with a null, shouldnt be able to see this");
if(c.isPresent()) System.out.println(c.get());
}
}
但是请注意,它不应该是一个通用的任何值的volder,你更可能只想使用Optional作为方法的返回类型来对客户说,它可能确实是空的。
请记住,尝试获取(通过get()方法)Optional实例中的null元素将导致NoSuchElementException 立即(但它仍然是未经检查的异常)