使用接口来处理常量,我无法调用抛出异常的预定义方法。
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=""
并且取消投掷并保留其余部分。
谢谢
答案 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