我正在使用SWIG将C ++库包装成JAVA,并遵循Handling C++ exceptions in Java via SWIG的想法。
我已经能够包装所有异常,但是如果在C ++声明中没有明确告知启动异常的函数,则JAVA代码不起作用。例: 如果我做
class A {
public:
void f () throw (MyException){};
一切都按预期进行。但是,如果我这样做
class A {
public:
void f (){};
当我使用代理类
在JAVA中捕获异常时try {
// this is the proxy wrapped (java) class
A.f();
}
catch(MyException e)
{
...
}
JAVA编译失败,出现以下错误
exception MyExceptionn is never thrown in body of corresponding try statement
我不想在我的C ++代码中使用异常通知,如果我可以避免它http://www.gotw.ca/publications/mill22.htm。问题是,我可以避免吗?怎么样?
答案 0 :(得分:1)
使MyExtension扩展RuntimeException而不是Exception,然后它可以从任何函数抛出而不仅仅是显式声明throws子句的函数。
static class MyException extends RuntimeException {
}
...
static void f() {
throw new MyException();
}
...
try {
f();
} catch(MyException e) {
}