1、Java8或者guava lib中,提供了Optional类,这是一个元素容器,通过它来封装对象,可以减少判空,不过代码量还是不少,不是很爽。
2、Collections返回空的时候,可以直接返回空集合,调用方可以省略判空,但是前提是有一个良好的编程习惯。
3、接口入参如果判断参数为null的化,可以抛出一异常。
4、接口入参可以通过Assert语句来处理null。
5、可以通过以下基于工厂模式的方式来处理null的问题。
具体的操作
public interface Action {
void doSomething();
}
某一个操作
public class DoAction implements Action{
@Override
public void doSomething() {
System.out.println("do something");
}
}
查询对应的操作
public interface Parser {
Action findAction(String userInput);
}
实现查询对应操作,实现内部类判断输入查找类型是否为null,如果为null则返回默认Action即DO_NOTHING。
public class MyParser implements Parser {
private static Action DO_NOTHING = new Action() {
@Override
public void doSomething() {
System.out.println("do nothing");
}
};
@Override
public Action findAction(String userInput) {
if(null == userInput){
return DO_NOTHING;
}
return new DoAction();
}
}
实现查询工厂
public class ParserFactory {
public static Parser getParser() {
return new MyParser();
}
}
调用示例,从而在调用方避免null判断
public class Main {
public static void main(String[] args) {
ParserFactory.getParser().findAction("yaqi").doSomething();
ParserFactory.getParser().findAction(null).doSomething();
}
}
执行结果
do something
do nothing