java包前缀swig

时间:2011-08-30 13:22:59

标签: java swig

我正在使用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文件,但这不是一个令人满意的方法。谢谢你的想法!

1 个答案:

答案 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类型地图。