从结构Java类中删除SWIG生成的getter / setter

时间:2012-03-26 16:52:42

标签: swig

我正在使用javacode typemap来添加一些额外的函数来代替SWIG生成的函数。我想删除SWIG为unsigned char mac[6];结构的public short[] getMac()public void setMac(short[] value)details_t_)生成的默认getter和setter。我尝试使用%ignore details_t_::setMac;指令,但它不起作用。任何建议作为一种适当的技术来做到这一点?

%module Test
%typemap(javacode) struct details_t_ %{
    public String getMacAddress() {
        return Test.getMacAddressAsString(this); //another API in Test.java
    }

%};

%rename (Details) details_t_;
typedef struct details_t_ {
    uint16_t                      code;
    char                          *name;
    sockaddr                      *saddr;
    uint32_t                      saddr_len;
    uint8_t                       flag;
    ios_boolean                   is_child;
    unsigned char                 mac[6];
} details_t;

1 个答案:

答案 0 :(得分:4)

不要使用setter和getter说%ignore,而是直接命名字段本身,例如:

%module Test
%typemap(javacode) struct details_t_ %{
    public String getMacAddress() {
        return Test.getMacAddressAsString(this); //another API in Test.java
    }

%};

// Ignore field, not get/sets
%ignore details_t_::mac;
%rename (Details) details_t_;
typedef struct details_t_ {
    uint16_t                      code;
    char                          *name;
    sockaddr                      *saddr;
    uint32_t                      saddr_len;
    uint8_t                       flag;
    ios_boolean                   is_child;
    unsigned char                 mac[6];
} details_t;

如果你想使它变为不可变而不是隐藏(即只有一个getter,没有生成setter)你可以写:

%immutable details_t_::mac;

而不是前一个示例中的%ignore

如果你想让整个结构不可变,你可以这样做:

// Read only, i.e. only getters
%immutable;
%rename (Details) details_t_;
typedef struct details_t_ {
    uint16_t                      code;
    char                          *name;
    sockaddr                      *saddr;
    uint32_t                      saddr_len;
    uint8_t                       flag;
    ios_boolean                   is_child;
    unsigned char                 mac[6];
} details_t;

// Cancel the immutable directive
%mutable;