我尝试在SWIG的帮助下为C ++接口的Java生成足够的接口。一般来说它工作得很好,但现在我遇到了一个(绑定)结构数组的问题。
我有以下两种结构:
typedef struct
{
char* street;
char* city;
} Address;
typedef struct
{
char* firstname;
char* lastname;
Address addresses[4];
} Person;
Person结构的地址字段的getter和setter是:
public Address getAddresses() { /*...*/ }
public void setAddresses(Address value) { /*...*/ }
使用这些访问器,我没有机会获得或设置阵列中的第二个,第三个或第四个地址。我做错了什么?如何通过索引访问数组项?
最好的解决方案是Java生成的代码,如下所示:
public class Person {
/* here: ctor, cPtr, finalize method, ... */
/* here: getters and setters for firstname and lastname */
private final java.util.List<Address> addresses = new java.util.AbstractList<Address>() {
@Override
public int size() { return 4; }
@Override
public Address set(int index, Address address) {
Address result = get(i);
/* call adequate MyModuleJNI method
for setting the address at specified index */
return result;
}
@Override
public Address get(int index) {
return /* call adequate MyModuleJNI
for getting the address at specified index */;
}
}
public List<Address> getAddresses() {
return addresses;
}
}
我怎样才能达到这样的效果? (涉及哪些类型映射?如何获取size方法的数组大小,...)
如果有人可以引导我走向正确的方向,那就太好了。