我有服务,一个需要输入并运行一些业务逻辑的简单类。在执行此服务之前,用户必须设置所有数据。一般来说,它看起来像这样:
public class TestService extends InnerServiceBase {
/**
* Mandatory input
*/
private Object inputObj;
@Override
protected ErrorCode executeImpl() {
//Some business logic on inputObj
return null;
}
public void setInputObj(Object inputObj) {
this.inputObj = inputObj;
}
}
如果inputObj
为空,抛出的最佳运行时异常是什么?
答案 0 :(得分:2)
IllegalStateException
似乎是最合适的。对象的调用状态不正确executeImpl()
。无论您使用何种异常,请确保错误消息有用。
你是否应该使用未经检查的例外是另一个问题......
答案 1 :(得分:1)
取决于场景。
NullPointerException
是合理的,因为您不希望该输入为null
。添加描述性异常消息会很有帮助。IllegalArgumentException
,null
可以被视为非法论据。答案 2 :(得分:1)
如果使用setInputObj
参数调用null
,并且该参数无效,则抛出NullPointerException
。关于"纠正"有一些争论。例外(IllegalArgumentException or NullPointerException for a null parameter?),但是Guava,Apache Commons Lang甚至JDK本身(Objects.requireNonNull
)已经确定NPE
。
如果在设置executeImpl
之前调用了inputObj
,请抛出IllegalStateException
。