我刚刚开始学习番石榴,我注意到一些奇怪的事情ImmutableList.builder()
.
这不能编译:
List<String> iList = ImmutableList.builder().add("One").add("Two").build();
//Type mismatch: cannot convert from List<Object> to List<String>
这有效:
List<String> iList = new ImmutableList.Builder<String>().add("One").add("Two").build();
我可以忍受使用new ImmutableList.Builder<String>()
但这是一个错误吗ImmutableList.builder()
?
不,只需提供类型参数
List<String> iList = ImmutableList.<String>builder().add("One").add("Two").build();
这绝不是 Guava 中的错误,它只是 Java 语言的一个功能/限制。编译器无法推断返回类型build()
来自先前的方法调用或结果被分配到的变量的声明。
安吉丽卡·兰格explains this
自动类型参数推断。该方法像常规方法一样被调用
非泛型方法,即不指定类型的方法
论据。在这种情况下,编译器会自动推断类型
论点来自调用上下文.
她还举了一个类似的例子为什么实例创建表达式的类型推断失败?
String s = new ArrayList<>().iterator().next(); // error
和国家
在上面的示例中,会发出错误消息,因为 new-expressionnew ArrayList<>()
没有构造函数参数,它既不会出现在赋值的右侧,也不会出现在
方法调用的参数。相反,它出现在一条链中
方法调用。这样的链不是有效的类型推断上下文。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)