魔改 toString 的模板生成 jna struct 的 order | LIXI.FUN
0%

魔改 toString 的模板生成 jna struct 的 order

开发 jna 的时候,传 struct 给动态链接库,需要继承 com.sun.jna.Structure 重写 getFieldOrder() 方法,返回子类的 field 的书写顺序的 List。

略一观察就可以发现,跟 toString() 干的事儿很是相像,只不过现在是只需要字段名,而不需要字段值。

就给 idea 生成 toString() 的地方加个 template(ps:字段少,手动也没啥,字段多起来,不自动化,靠人易错乱。)

new-toString-template

添加方式

复制的模板内容在最后

最终效果

模板内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected List<String> getFieldOrder() {
#if ( $members.size() > 0 )
#set ( $i = 0 )
String[] fields = {
#foreach( $member in $members )
"$member.name"##
#if ( $i != $members.size() - 1)
, ##
#else

#end
#if (($i + 1) % 5 == 0)

#end
#set ( $i = $i + 1 )
#end
};
return Arrays.asList(fields);
#else
return new ArrayList<>();
#end
}

后续

写成了插件,在 Generate 选项里,加了一项 getFieldOrder,就不需要侵染 toString 的模板了。

后来又把 String[] fields = ... 出来 private static final FIELD_ORDER = Arrays.asList(...);getFieldOrder 里直接 return FIELD_ORDER; 就不需要每次分配内存去生成这个东西了。

觉得有收获就鼓励下作者吧