2011-08-30 98 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類型映射了。