2012-03-30 223 views
3

這種情況似乎是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。

怎麼辦?

+0

你不說你正在使用的是什麼版本的javac。 – 2012-03-30 06:05:08

+0

對不起。這是java 1.6.0_31。 – 2012-03-30 06:17:31

回答

1

怎麼辦?

這裏有幾個實用的解決方案。

  • 嘗試使用javac從Java 7的最新補丁發佈我記得在Java 6中某些javac編譯器的bug只固定在Java 7中的聽證會......但我不知道名單。 (並且Java Bugs數據庫在搜索時沒有希望...)

  • 放棄它,並使用您已經發現「工作」的兩種選擇之一。

+0

是的,一個較新的javac(例如openjdk 8)很好的編譯了OP的代碼 – charlie 2016-08-25 10:07:02

相關問題