我正在从Eclipse切换到IntelliJ IDEA,我在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)。
它不仅仅是String,它适用于所有类型/类(我还有其他一些类型)
为什么我在intellij中会遇到这些错误而不是在eclipse中?
答案 0 :(得分:2)
Java的String
类是最终的,你的this.value
无法继承它。您应该使用.toString()
或String.valueOf()
来避免投射。
您会看到这种现象,因为Eclipse编译器与javac不同(默认情况下在IntelliJ中使用,但您可以更改它)。 Eclipse编译器更允许。有关详细信息,请参阅this question。