[英]Java ternary operator influence on generics type inference
public List<String> foo1() {
List<String> retval = bar();
if (retval == null)
return Collections.emptyList();
else
return retval;
}
public List<String> foo2() {
List<String> retval = bar();
return retval == null ? Collections.emptyList() : retval;
}
為什么foo1()
編譯得很好而foo2()
有錯誤? (更准確地說“類型不匹配:無法從List <capture#1-of?extends Object>轉換為List <String>” )
我原以為這兩個函數都會編譯成相同的字節碼,所以一個聰明的編譯器應該推斷出emptyList()
的正確類型...
在java 8中編譯我很好。
早期版本的Java可能需要更多幫助
return retval == null ? Collections.<String>emptyList() : retval;
應該管用。
編輯這是由於Java 8類型推斷的改進,如此處所述
http://openjdk.java.net/jeps/101
這里有一個高亮的博客: http : //blog.jooq.org/2013/11/25/a-lesser-known-java-8-feature-generalized-target-type-inference/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.