缺少必需输入时使用的最佳运行时异常是什么

时间:2015-04-26 05:05:36

标签: java exception runtimeexception

我有服务,一个需要输入并运行一些业务逻辑的简单类。在执行此服务之前,用户必须设置所有数据。一般来说,它看起来像这样:

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为空,抛出的最佳运行时异常是什么?

3 个答案:

答案 0 :(得分:2)

IllegalStateException似乎是最合适的。对象的调用状态不正确executeImpl()。无论您使用何种异常,请确保错误消息有用。

你是否应该使用未经检查的例外是另一个问题......

答案 1 :(得分:1)

取决于场景。

  • 如果这是其他开发者使用的API的一部分,那么抛出NullPointerException是合理的,因为您不希望该输入为null。添加描述性异常消息会很有帮助。
  • 如果您对投放NPE不感兴趣,或者这是代码中没有进入API的一部分,那么您可以抛出IllegalArgumentExceptionnull可以被视为非法论据。

答案 2 :(得分:1)

如果使用setInputObj参数调用null,并且该参数无效,则抛出NullPointerException。关于"纠正"有一些争论。例外(IllegalArgumentException or NullPointerException for a null parameter?),但是Guava,Apache Commons Lang甚至JDK本身(Objects.requireNonNull)已经确定NPE

如果在设置executeImpl之前调用了inputObj,请抛出IllegalStateException