我有一个thrift文件point.thrift只有两个变量如下:
struct Point {
1: double lat,
2: double lon
}
但是当我使用
生成java文件时thrift --gen java point.thrift
然后生成的java代码有其他布尔变量,setLat和setLon。所以,我的Point对象如下所示:
"point": {
"lat": 12.983451879142935,
"lon": 77.75181960314512,
"setLat": true,
"setLon": true
}
是否有任何方法可以从我的点对象中删除这些额外的布尔变量,因为它增加了我的对象的大小,这反过来会占用我存储它们时的大量空间。请注意,这是基本定义,但实际定义将包含许多其他字段。因此,存储是我关心的问题。
答案 0 :(得分:1)
也许您正在寻找"必需"?
user@ubuntu:~/test$ cat point.thrift
struct Point {
1: required double lat,
2: required double lon}
user@ubuntu:~/test$ thrift -gen java point.thrift
user@ubuntu:~/test$ cat gen-java/Point.java | grep public | grep -v '{'
public double lat; // required
public double lon; // required
public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
public Point(
user@ubuntu:~/test$
必需表示该字段必须始终存在,因此请确保语义适合。
答案 1 :(得分:1)
Thrift编译器生成一个bitset来确定设置或未设置的字段。这些的背景在于代码已经说过:必要性。
简而言之:Thrift支持三种要求,optional
,required
和第三种称为&#34;默认&#34; requiredness。后者在没有明确的optional
或required
规范时发生。 Thrift运行时库使用这些标志来确定是否为特定字段分配了值。
在Java的情况下,实现显然总是生成这些&#34; isset&#34;比特,无论你指定什么要求。