我的问题与这个问题非常相似 Default arguments with default values in Thrift Python client从未完全解决(一个答案是猜测而另一个很难理解)。
问题是,您是否可以使用服务方法的默认参数,而无需为每个需要的方法创建结构。我有以下Java服务,我想用Thrift处理程序包装
class MyService {
public void foo(){ foo(false); }
public void foo(boolean someAdvancedFeature){...}
}
所以我想创建Thrift IDL
service MyServiceThrift {
void foo(),
void foo(1:bool),
}
但这是无效的,因为你不能有2个名为foo的方法。所以我试过
service MyServiceThrift {
void foo(1:optional bool someAdvancedFeature = false)
}
但我得到一个解析错误说Cannot use reserved language keyword: "false"
所以我很好也许我可以让它可选
service MyServiceThrift {
void foo(1: optional bool someAdvancedFeature)
}
但是我收到警告optional keyword is ignored in argument lists.
,事后才知道这只是创建界面。
这是为每个采用可选参数的方法创建新struct
的唯一方法吗? (是的,你可以为某些方法重新使用结构,但是我需要一个参数的每个排列,如果一个方法添加了一个参数而另一个方法没有参数,那么就会破坏一些方法)。让用户创建一个(可能是空的)类只是为了将参数传递给方法似乎很愚蠢,我真的不喜欢必须为我的服务中的每个方法生成/维护一个单独的类。我错过了什么吗?
答案 0 :(得分:1)
这是一个非常好的问题,因为技术上结构已经存在 - 在幕后。然而,我担心这种行为就像你描述的那样 - 至少目前 - 没有别的办法可能除了这样的解决办法之外:
enum TriState {
Unused = 0
Yes = 1
No = 2
}
service Foobar {
void DoIt( 1: TriState someAdvancedFeature)
void Ints( 1: set<byte> usedArgs, 2: i32 value, 3: string foobarbaz)
}