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 转换为List ”)
foo1()
foo2()
我本以为两个函数都可以编译为相同的字节码,所以一个聪明的编译器应该为emptyList()… 推断正确的类型。
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/