Java 是否可以在Thrift struct中为union、嵌套结构和容器定义默认值?

Java 是否可以在Thrift struct中为union、嵌套结构和容器定义默认值?,java,thrift,Java,Thrift,我有一个thrift结构,它有许多不同类型的字段。其中一些可能有默认值,也可能没有默认值 问题是如何在.thrift文件中定义默认值 enum E { A = 1, B = 2, C = 3 } struct Nested { 1: i64 f1, 2: required string f2, 3: optional E f3 = E.B } union Union { 1: string f1; 2: string f2; } struct TestSt

我有一个thrift结构,它有许多不同类型的字段。其中一些可能有默认值,也可能没有默认值

问题是如何在.thrift文件中定义默认值

enum E {
  A = 1,
  B = 2,
  C = 3
}

struct Nested {
  1: i64 f1,
  2: required string f2,
  3: optional E f3 = E.B
}

union Union {
  1: string f1;
  2: string f2;
}


struct TestStruct {
  1: optional E f1 = E.A,
  2: required i64 f2 = 1,
  3: required string f3 = "f3",
  4: Nested f4,
  5: Union f5,
  6: map<string, i64> f6,
  7: set<i64> f7,
  8: list<string> f8
}
enum E{
A=1,
B=2,
C=3
}
嵌套结构{
1:i64 f1,
2:所需字符串f2,
3:可选E f3=E.B
}
工会{
1:字符串f1;
2:字符串f2;
}
结构测试结构{
1:可选E f1=E.A,
2:要求i64 f2=1,
3:必需字符串f3=“f3”,
4:嵌套f4,
5:工会f5,
6:地图f6,
7:设置f7,
8:列表f8
}
考虑此示例,是否可以为字段f4-f8定义默认值

我认为这是不可能的,但thrift docs并没有直接说出来。

该文件提供了一些示例,例如:

struct东西{
1:i32你好,
2:i32再见
}
const map GEN_MAP2={“你好”:233,“lkj98d”:853,“lkjsdf”:098325}
因此,解决方案可能是这样的:

struct TestStruct {
  1: optional E f1 = E.A,
  2: required i64 f2 = 1,
  3: required string f3 = "f3",
  4: Nested f4 = { f1 : 24, f2 : "i am required", f3 : E.B }
  5: Union f5 = { f1 : "one" }
  6: map<string, i64> f6 = { "hello": 42, "goodbye":24 },
  7: set<i64> f7 = [ 1, 2, 3, -4 ]
  8: list<string> f8 = ["bla","bla","bla"]
}
struct TestStruct{
1:可选E f1=E.A,
2:要求i64 f2=1,
3:必需字符串f3=“f3”,
4:嵌套f4={f1:24,f2:“我是必需的”,f3:E.B}
5:并集f5={f1:“一”}
6:MapF6={“你好”:42,“再见”:24},
7:设置f7=[1,2,3,-4]
8:列表f8=[“bla”,“bla”,“bla”]
}
请注意,
set
list
(括号)的语法不同于
map
(大括号)


我得到了一个奇怪的错误与4和5虽然。。。不确定这是不是一个好主意。

是的,这正是我想要的!对于4和5,我们需要使用类似的语法来映射,但将字段名指定为字符串:
{“f1”:24,“f2”:“我是必需的”,“f3”:E.B}
struct TestStruct {
  1: optional E f1 = E.A,
  2: required i64 f2 = 1,
  3: required string f3 = "f3",
  4: Nested f4 = { f1 : 24, f2 : "i am required", f3 : E.B }
  5: Union f5 = { f1 : "one" }
  6: map<string, i64> f6 = { "hello": 42, "goodbye":24 },
  7: set<i64> f7 = [ 1, 2, 3, -4 ]
  8: list<string> f8 = ["bla","bla","bla"]
}