在实现方法时抛出异常

时间:2017-02-01 22:02:13

标签: java

我获得了一个界面,其中包含有关如何在java中实现这些方法的注释。

One interface method with the comments
<p> If newX is not null, then the method setX changes it's x so that it will be newX. 
If newX is null, then setX throws an IllegalArgumentException without changing anything.

public void setX(String newX) throws IllegalArgumentException


My implementation

public void setX(String newX) throws IllegalArgumentException
{
    if(newX == null)
        throw new IllegalArgumentException("newX may not be null");
    if(newX != null)
        x = newX;
}

这是怎么抛出异常的?另外,看看它如何在它为空时抛出异常,我可以删除第二个if语句来检查newX是否为空?对此的任何改进也将受到赞赏。

2 个答案:

答案 0 :(得分:2)

您的代码是正确的,您是正确的,您可以删除第二个if声明;如果程序到达方法的第三行,那么newX肯定不是null

您也不需要throws声明,因为IllegalArgumentExceptionRuntimeException的子类。只有当代码抛出不是 {{1>的子类的异常时,编译器才需要try / catch块和throws声明}}

它是Java中用于处理非法参数的一种非常常见的模式:

RuntimeException

答案 1 :(得分:0)

据我所知,您的实现可以正常工作,但是如果您在if语句中抛出IllegalArgument,则无需在方法减速中重复此操作。

即。你可以写:

public void setX(String newX)
{
    if(newX == null)
        throw new IllegalArgumentException("newX may not be null");
    if(newX != null)
        x = newX;
}

通常,当您在自己的代码中有未处理的异常时,您将在方法声明中使用'throws IllegalArgumentException'。

例如,您的方法可能使用引发中断异常的Thread.sleep(1000)行,如果您不希望您的方法处理此问题,您可以将其传递给最初调用该方法的位置: / p>

public void run() throws InterruptedException {

    // code
    Thread.sleep(1);
}

而不是

public void run() {

try {
    Thread.sleep(1); // delay by 100ms
} catch (InterruptedException e) {
    e.printStackTrace();
}

现在,调用run()的代码将需要处理异常。希望能够澄清一些理解,你可以做其中一个,但不需要你同时做这两个。