這種情況似乎是Eclipse的Java編譯器壓縮javac的另一種情況。對我來說唯一的問題是它是否是JLS或javac中的錯誤。自引用類型和有界通配符之間的不良交互
interface EndoFunctor< C, FC extends EndoFunctor< C, FC > > { /*...*/ }
interface Algebra< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }
第二行在Eclipse中編譯,但未能在javac中編譯,並顯示「類型參數FC不在其範圍內」消息。
FC宣佈擴展EndoFunctor <?擴展C,FC>,並且FC上的界限是它擴展了EndoFunctor < D,FC>用於推斷的D,在這種情況下,它是?擴展C.我認爲javac沒有意識到通配符在兩個上下文中表示相同的未知類型。 Eclipse雖然!
顯然以下解決該問題獲取的javac:
interface EndoFunctor< C, FC extends EndoFunctor< ? extends C, FC > > { /*...*/ }
但這不是我想要該接口的定義更加寬鬆。
我也可以嘗試
interface Algebra< C, D extends C, FC extends EndoFunctor< D, FC > >
但這種方法強迫我到處通過攜帶額外的類型參數d。
怎麼辦?
你不說你正在使用的是什麼版本的javac。 – 2012-03-30 06:05:08
對不起。這是java 1.6.0_31。 – 2012-03-30 06:17:31