我正在使用 Apache thrift,它生成如下所示的 Java 類:public class MyEvent implements org.apache.thrift.TBase<MyEvent, MyEvent._Fields>我想創(chuàng)建一個(gè)容器類,它采用實(shí)現(xiàn) TBase 的泛型。我想編寫如下代碼:(科特林)val msg = MyContainer<MyEvent>()但是,我不能這樣做class MyContainer<T: TBase>,因?yàn)槲倚枰顚?TBase 的兩個(gè)參數(shù),我做了這樣的事情:class MyContainer<T: TBase<T,F>, F: TFieldIdEnum>但是,這需要我編寫如下代碼:val msg = MyContainer<MyEvent, MyEvent._Fields>()我想這是可行的,否則可以讓我獲得我需要的功能,但無論如何我可以更簡(jiǎn)潔地告訴 java “我需要一個(gè) T 來實(shí)現(xiàn) TBase 類型 T 和 T._Fields”,所以我可以做嗎val msg = MyContainer<MyEvent>()?
1 回答

守著一只汪
TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果它只是一個(gè)容器,你可以使用星投影:
class MyContainer<T: TBase<T,*>>
那會(huì)val msg = MyContainer<MyEvent>()
成功的。當(dāng)您無論如何都使用反射來處理對(duì)象時(shí),這種技術(shù)有時(shí)很有用,例如 Protobuf 和 Thrift。
但是你的問題沒有給出你打算如何使用這個(gè)容器的提示。
添加回答
舉報(bào)
0/150
提交
取消