我遇到了一個編譯失敗,而寫一些Java代碼,這是我蒸餾至下面的試驗情況下編譯錯誤:泛型和三元運算在JDK 7
import java.util.Collections;
import java.util.List;
public class TernaryFailure {
public static List<String> thisWorks() {
return Collections.emptyList();
}
public static List<String> thisFailsToCompile() {
return true ? Collections.emptyList() : Collections.emptyList();
}
}
上述代碼失敗,javac
編譯與JDK 1.7.0_45:
$ javac TernaryFailure.java TernaryFailure.java:10: error: incompatible types return true ? Collections.emptyList() : Collections.emptyList(); ^ required: List<String> found: List<Object> 1 error
然而,編譯沒有與JDK 1.8.0_05任何錯誤。
這是Java 7實現中的錯誤嗎?或者是否對Java 8中的Java語言規範進行了改進以開始允許這一點 - 如果是的話,那麼改變是什麼?
http://stackoverflow.com/questions/21258160/why-is-javas-type-inference-so-weak – assylias
三元運算符與普通回報結合會出現問題,這是衆所周知的。顯式指定類型參數。 – qqilihq