为了账号安全,请及时绑定邮箱和手机立即绑定

节俭类型作为通用

节俭类型作为通用

湖上湖 2023-06-08 19:54:01
我正在使用 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>()?
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

如果它只是一个容器,你可以使用星投影:

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

那会val msg = MyContainer<MyEvent>()成功的。当您无论如何都使用反射来处理对象时,这种技术有时很有用,例如 Protobuf 和 Thrift。

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


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信