2014-04-29 41 views
0

比方說,我有以下殘缺碼:Eclipse內容協助建議<classname>。 <parameter>爲通用參數和報告錯誤

public class Foo<Type> { 
    public Foo() { 
     List<Type> list = new ArrayList| 
    } 
} 

其中管道(「|」)ArrayList後表示當前光標位置。現在

,如果我按按Ctrl + 空間並讓Eclipse自動完成對ArrayList構造函數調用,它會生成以下行:

List<Type> list = new ArrayList<Foo.Type>(); 

,並立即報告一個錯誤,「富.Type無法解析爲類型「。

這給我留下了幾個問題:

爲什麼Eclipse的包括在自動完成泛型參數Foo.?這是一個錯誤?是否有這個原因?它可以關閉嗎?最後:爲什麼Foo.Type不能解決?

+0

通常泛型類型變量使用單個字母,例如''而不是'',因爲第二種形式使它看起來像是指的是一個名爲'Type'的實際類。在這種情況下,Eclipse可能有一個錯誤,並且正因爲這個原因而感到困惑。如果您更改爲'',那麼問題就會消失嗎? –

+0

@WilliamPrice有趣的想法。不幸的是,將其更改爲「T」不能解決問題。也許我會把它報告給Eclipse bug跟蹤器。他們可能會有解決方案或評論。 –

回答

1

我可以至少部分回答你的問題。首先,簡單的一個。 Foo.Type無法解析,因爲內部類別Foo類別內名爲Type。在你的例子中,沒有這樣的內部類。此外,在您的代碼中,符號Type實際上是泛型類型變量,既不是對任何特定類的名稱也不是引用。這是容易複製,在DrJava這裏顯示的,而不是針對您使用Eclipse: Screenshot from DrJava showing compiler error referencing Foo.Type

「爲什麼Eclipse的包括Foo.」和「這是一個錯誤嗎?」我認爲答案顯然是是的,這是一個錯誤,只是因爲您的發佈代碼中並沒有像編譯器報告的Foo.Type這樣的東西。但是作爲一個bug,如果不查看Eclipse代碼,或者Eclipse依賴其自動完成邏輯的任何代碼,就很難回答你的問題的部分原因。什麼Eclipse 應該推薦給你只是Type。同樣,DrJava表明,使用<Type>完全編譯預期:

Screenshot from DrJava showing a clean compilation when referencing Type without any qualifier in front of it.

至於把這個問題了,因爲我不是一個Eclipse用戶,我可以在此刻做的最好的是引導您到這個相關的SO問題:Disable content assist in Eclipse

雖然我不知道Eclipse中是否真正依靠編譯器類型推斷提供自動完成建議做,也出現了一些javac編譯器推斷錯誤的,多年來,以及Eclipse的行爲報告不匹配的javac。其中一些是javac錯誤,另一些可能是Eclipse問題。在Web上搜索「java類型推斷錯誤」會產生大量命中,但此時它只是的猜測。您沒有指定您使用的Java版本;嘗試使用不同版本的相同代碼(JDK 6 vs 7 vs 8)可能會很有趣。

+0

你的解釋爲什麼'Foo.Type'無法解決是有道理的。我也認爲這可能是一個錯誤,所以我向Eclipse團隊提交了一份報告:https://bugs.eclipse.org/bugs/show_bug.cgi?id = 435143。讓我們看看他們說什麼。如果他們承認它,你的答案是現貨,你會得到√! ;) –

相關問題