我正在使用 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 。问题是,我能避免吗?怎么办?
最佳答案
使 MyExtension 扩展 RuntimeException 而不是 Exception,那么它可以从任何函数抛出,而不仅仅是显式声明 throws 子句的函数。
static class MyException extends RuntimeException {
}
...
static void f() {
throw new MyException();
}
...
try {
f();
} catch(MyException e) {
}
关于java - SWIG 和异常 : avoid using throw(Exception) in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33146568/