猿问

节俭类型作为通用

我正在使用 Apache thrift,它生成如下所示的 Java 类:

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

我想创建一个容器类,它采用实现 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 “我需要一个 T 来实现 TBase 类型 T 和 T._Fields”,所以我可以做吗val msg = MyContainer<MyEvent>()


湖上湖
浏览 101回答 1
1回答

守着一只汪

如果它只是一个容器,你可以使用星投影:class&nbsp;MyContainer<T:&nbsp;TBase<T,*>>那会val msg = MyContainer<MyEvent>()成功的。当您无论如何都使用反射来处理对象时,这种技术有时很有用,例如 Protobuf 和 Thrift。但是你的问题没有给出你打算如何使用这个容器的提示。
随时随地看视频慕课网APP

相关分类

Java
我要回答