为什么我得到这个未处理的异常?

时间:2016-06-14 13:37:30

标签: java throw

使用接口来处理常量,我无法调用抛出异常的预定义方法。

  public interface ParametresConstantes {
    public static final String DB_CONNEXION = ChargementProjetProperties.getInstance().getValueByKey("conn");
//a red line under the right part of this instruction.
    public static final int SIZE_TEXT_FIELD = 20;
}



public String getValueByKey (String key) throws Exception
{
    String value = null;
    load();
    if (props.containsKey(key))
    {
        value = props.getProperty(key);
    }
    else
    {
        throw new Exception ("no key found");
    }
    return value;
}

如何解决?

修改

如下所述,因为静态块不能在接口上工作,而是在实现它的类上工作,并且因为变量是最终的而且无法分配,所以我在else块中临时替换为value=""并且取消投掷并保留其余部分。

谢谢

3 个答案:

答案 0 :(得分:1)

正如你所说,问题来自于你不能在这里使用抛出异常的方法。

从语法上讲,它适用于静态初始化块:

public static URI uri;

static {
  try {
    uri = new URI("http://www.example.com/image.jpg");
  } catch(Exception e) {
    //Eventually throw new IllegalArgumentException();
  }
}

但我强烈建议不要这样做。恕我直言,静态初始化块是一个线索,设计有问题。

我认为定义方法更清晰:

public String getDBConnection () {
  return ChargementProjetProperties.getInstance().getValueByKey("conn");
}

答案 1 :(得分:0)

mongoexport方法抛出一个异常,你没有在任何地方捕获它。这就是为什么它说有一个未处理的例外。您应该在接口中声明getValueByKey,但在下游的某个地方(已实现该接口的类)定义它,您可以在其中处理异常。

答案 2 :(得分:0)

static final String DB_CONNEXION初始化等效于静态构造函数,如果抛出或引发异常,则无法处理异常。更好的方法是保持静态构造函数无异常或注册UncaughtExceptionHandler