2013-12-11 51 views
0

我從Eclipse切換到IntelliJ IDEA,並且在IntelliJ中得到編譯錯誤,但在eclipse中沒有。在IntelliJ中編譯錯誤但不在eclipse中

public class TestClass<K, V extends Comparable<V>> { 

private K key; 
private V value; 

public void someMethod() { 
    if (this.value instanceof String) { 
     String stringValue = (String) this.value; 
     // some code 
    } 
} 
} 

(不要怪我的代碼,它的遺留代碼,而不是我的)

在Eclipse中一切都很好,在的IntelliJ它被標記爲它說「不可兌換類型,無法施展V到錯誤java.lang.String中」。

對於我使用我的標準MacOS X JDK(1.6.0_65)。

它不僅與字符串,它與每一個類型/類(我有這方面的一些其他並行註解)

爲什麼我得到的IntelliJ中的這些錯誤,但不是在Eclipse?

回答

2

Java的String類是final的,你的this.value沒有辦法繼承它。您應該使用.toString()String.valueOf()來避免投射。

您會看到這種現象,因爲Eclipse編譯器與javac不同(在IntelliJ中默認使用,但可以更改)。 Eclipse編譯器更容許。有關更多信息,請參閱this question

+0

''this.value''不是從''String''繼承的。爲了更好的理解,我更新了我的問題 – nahri

+0

這就是爲什麼你不能將它轉換爲String的原因。你只能假定它實現了「Comparable」。 – Vic

+0

但是爲什麼我只在IntelliJ中得到這個錯誤,但不是在eclipse中? – nahri