java 使用 thrift 生成的文件中的额外布尔集字段
Extra boolean set fields in java generated file using thrift
我有一个 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
}
有什么方法可以从我的点对象中删除这些额外的布尔变量,因为它会增加我的对象的大小,而这反过来会在我存储它们时占用大量 space。请注意,这是基本定义,但实际定义将包含许多其他字段。所以,存储是我关心的问题。
也许您正在寻找 "required"?
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$
必需表示该字段必须始终存在,因此请确保语义合适。
Thrift 编译器生成一个位集来确定设置或未设置哪些字段。这些的背景在于codef已经说过的:requiredness.
简而言之:Thrift 支持三种需求,optional
、required
和第三种称为 "default" 需求。后者发生在没有明确的 optional
或 required
规范时。 Thrift 运行时库使用这些标志来确定是否为特定字段分配了值。
在 Java 的情况下,实现显然总是生成这些 "isset" 位,无论您指定什么要求。
我有一个 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
}
有什么方法可以从我的点对象中删除这些额外的布尔变量,因为它会增加我的对象的大小,而这反过来会在我存储它们时占用大量 space。请注意,这是基本定义,但实际定义将包含许多其他字段。所以,存储是我关心的问题。
也许您正在寻找 "required"?
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$
必需表示该字段必须始终存在,因此请确保语义合适。
Thrift 编译器生成一个位集来确定设置或未设置哪些字段。这些的背景在于codef已经说过的:requiredness.
简而言之:Thrift 支持三种需求,optional
、required
和第三种称为 "default" 需求。后者发生在没有明确的 optional
或 required
规范时。 Thrift 运行时库使用这些标志来确定是否为特定字段分配了值。
在 Java 的情况下,实现显然总是生成这些 "isset" 位,无论您指定什么要求。