我正在使用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文件,但这不是一个令人满意的方法。谢谢你的想法!
答案 0 :(得分:0)
如果这些类来自另一个SWIG模块的%import
指令,则可以使用%typemap("javapackage")
,例如
%typemap("javapackage") Box2D, Box2D *, Box2D & "my.core.Box2D";
如果这些类是当前模块的一部分,并且您希望将当前模块放在特定包中,则可以在调用SWIG时使用-package
执行此操作,例如:
swig -c++ -Wall -java -package my.core.Box2D -outdir my/core/Box2D box2d.i
最后,如果你想让Java代理类上的方法采用Java类型,而不是SWIG知道的类型,你可以这样做:
%typemap(jstype) Box2D "my.core.Box2D"
但请注意,您需要提供一个额外的typemap来向SWIG解释如何将my.core.Box2D
类型转换为它生成的JNI接口所期望的类型。这可以是javain
类型地图,也可以是jtype
类型地图和相应的jni
类型地图。