2011-08-30 96 views
1

我使用痛饮生成Java代码。一个生成的类属于一个包(my.block.myint)。而生成的方法之一是这样的:Java包前缀痛饮

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

如果类从%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" 

,但请注意,您将需要发upply额外类型映射到解释痛饮如何从my.core.Box2D类型到JNI接口它产生预计的类型转换。这可能是一个javain类型映射,或者它可能是一个jtype类型映射和相应的jni类型映射了。