還有幾個其他的SO問題討論泛型編譯好,但是使用Eclipse的編譯器而不是javac(即Java: Generics handled differenlty in Eclipse and javac和Generics compiles and runs in Eclipse, but doesn't compile in javac) - 但是這看起來有點不同。javac錯誤:不可轉換類型與泛型?
我有一個enum
類:
public class LogEvent {
public enum Type {
// ... values here ...
}
...
}
,我有另一個類,它接受的類型的任意對象的方法從Enum
下降:
@Override public <E extends Enum<E>> void postEvent(
Context context, E code, Object additionalData)
{
if (code instanceof LogEvent.Type)
{
LogEvent.Type scode = (LogEvent.Type)code;
...
這正常在Eclipse中,但當我用ant
做一次清潔時,我得到一對錯誤,一個在instanceof
一行,另一個在鑄造線上:
443: inconvertible types
[javac] found : E
[javac] required: mypackage.LogEvent.Type
[javac] if (code instanceof LogEvent.Type)
[javac] ^
445: inconvertible types
[javac] found : E
[javac] required: com.dekaresearch.tools.espdf.LogEvent.Type
[javac] LogEvent.Type scode = (LogEvent.Type)code;
[javac] ^
爲什麼會發生這種情況,我該如何解決這個問題,以便它能夠正確編譯?
謝謝。爲什麼那麼醜陋?它很簡單,運行成本低。 – 2011-01-28 16:07:20
@Jason S:這很醜,因爲我看不出爲什麼這是必需的。 – 2011-01-28 16:10:40
這是一個已知的錯誤,IIRC。實際上,有幾十個相關的錯誤,但都沒有修正。 – maaartinus 2011-01-31 11:06:11