节俭类型作为通用

Thrift types as a Generic

我正在使用 Apache thrift,它生成 Java classes,看起来像这样:

public class MyEvent implements org.apache.thrift.TBase<MyEvent, MyEvent._Fields>

我想创建一个容器 class,它采用实现 TBase 的泛型。我想编写如下代码:

(科特林)

val msg = MyContainer<MyEvent>()

但是,我不能这样做 class MyContainer<T: TBase> 因为我需要填写 TBase 的两个参数,我做了这样的事情:

class MyContainer<T: TBase<T,F>, F: TFieldIdEnum>

然而这需要我写这样的代码:

val msg = MyContainer<MyEvent, MyEvent._Fields>()

我认为它可以工作,否则可以获得我需要的功能,但无论如何我可以更简洁地告诉 java "I need a T that implements TBase with type T and T._Fields" 这样我就可以做到 val msg = MyContainer<MyEvent>() ?

如果只是一个容器,可以使用star-projection:

class MyContainer<T: TBase<T,*>>

这将使 val msg = MyContainer<MyEvent>() 工作。当您使用反射来处理对象时,这种技术有时很有用,例如 Protobuf 和 Thrift。

但是你的问题没有给出关于你打算如何使用这个容器的提示。