我正在使用 SWIG 为我的 DLL 生成 Java JNI 包装器。
作为其中的一部分,我想生成一个自定义异常类,但我想自己为我的异常类提供完整的 Java 类实现。
我当然可以将我的 Java 类放在一个单独的文件中,但是是否可以将这样的手动 Java 类嵌入到 SWIG 脚本中?
我正在使用 SWIG 为我的 DLL 生成 Java JNI 包装器。
作为其中的一部分,我想生成一个自定义异常类,但我想自己为我的异常类提供完整的 Java 类实现。
我当然可以将我的 Java 类放在一个单独的文件中,但是是否可以将这样的手动 Java 类嵌入到 SWIG 脚本中?
除非该类是某种内部类,否则您几乎可以将其编写为单独的文件,因为这是您编译 Java 时需要的。
我有点困惑,为什么您要编写自己的纯 Java 异常类 - 与 SWIG 相关的正常事情是派生自std::exception
,即使它是通过%inline
指令并将 C++ 异常层次结构与 Java 自然合并为自由。
如果您真的想要(尽管我个人永远不会这样做)从 SWIG 接口生成纯 Java 类,则可以使用一种解决方法:
%module test
%nodefaultctor MyException;
%typemap(javabody) MyException %{
// Java stuff goes here (or in javacode typemap)
%}
%typemap(javafinalize) MyException ""
%typemap(javadestruct) MyException ""
struct MyException {};
生成:
public class MyException {
// stuff goes here
}
但由于这显然是一个丑陋的 hack,我强烈建议完全避免它,而只是在你的源代码分发中像往常一样编写类。