我正在使用 SWIG 在 java 中生成代码。生成的类之一属于包 (my.block.myint)。生成的方法之一如下所示:
public static boolean intersect(Box2D box1, Box2D box2) { ... }
此方法需要一个名为 Box2D 的类,该类位于另一个包 (my.core)
我希望生成的函数看起来像这样:
public static boolean intersect(my.core.Box2D box1, my.core.Box2D box2) { ... }
目前我在 .i 文件中使用此编译指示:
%typemap(javaimports) Box2D "my.core.Box2D";
它复制包my.block.myint中的Box2D.java文件,但这不是一个令人满意的方法。感谢您的想法!
最佳答案
如果这些类来自另一个 SWIG 模块的 %import
指令,您可以使用 %typemap("javapackage")
,例如
%typemap("javapackage") Box2D, Box2D *, Box2D & "my.core.Box2D";
如果这些类是当前模块的一部分,并且您希望将当前模块放入特定包中,则可以使用 -package
来执行此操作当您调用 SWIG 时,例如:
swig -c++ -Wall -java -package my.core.Box2D -outdir my/core/Box2D box2d.i
最后,如果您想让 Java 代理类上的方法采用 Java 类型,而不是 SWIG 已经知道的类型,您可以这样做:
%typemap(jstype) Box2D "my.core.Box2D"
但请注意,您需要提供额外的类型映射来向 SWIG 解释如何从 my.core.Box2D
类型转换为它生成的 JNI 接口(interface)所需的类型。这可以使用 javain
类型映射,也可以使用 jtype
类型映射和相应的 jni
类型映射。
关于java 包前缀为 swig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243853/