assert <condition>
或者assert <condition> : <object>
condition是一个布尔表达式,object是一个对象(其toString()方法的输出将会被包含在错误里)。public interface Action {
void doSomething();
}
public interface Parser {
Action findAction(String userInput);
}
Parser采用用户的输入作为参数,然后做一些事情(例如模拟一个命令行)。现在你可能会public class MyParser implements Parser {
private static Action DO_NOTHING = new Action() {
public void doSomething() { /* do nothing */ }
};
public Action findAction(String userInput) {
// ...
if ( /* we can‘t find any actions */ ) {
return DO_NOTHING;
}
}
}
比较这段代码:Parser parser = ParserFactory.getParser();
if (parser == null) {
// now what?
// this would be an example of where null isn‘t (or shouldn‘t be) a valid response
}
Action action = parser.findAction(someInput);
if (action == null) {
// do nothing
} else {
action.doSomething();
}
和这段:ParserFactory.getParser().findAction(someInput).doSomething();
这是个更好的设计,因为足够简洁,避免了多余的判断。即便如此,或许比较合适的设计是:findAction()方法之恶杰抛出一个异常,其中包含一些有意义的错误信息-----特别是在这个案例中你依赖于用户的输入。让findAction()方法抛出一个异常而不是简单的产生一个没有任何解释的NullPointerException
要好得多。try {
ParserFactory.getParser().findAction(someInput).doSomething();
} catch(ActionNotFoundException anfe) {
userConsole.err(anfe.getMessage());
}
或者你认为try/catch 的机制太丑了,你的action应该跟用户提供一个反馈而不是什么都不做:public Action findAction(final String userInput) {
/* Code to return requested Action if found */
return new Action() {
public void doSomething() {
userConsole.err("Action not found: " + userInput);
}
}
}
原文来自StackOverflow:http://stackoverflow.com/questions/271526/avoiding-null-statements-in-java原文地址:http://blog.csdn.net/acoder2013/article/details/46777925