我刚刚开始学习番石榴,我发现了一些奇特的东西ImmutableList.builder().
这不编译:
List<String> iList = ImmutableList.builder().add("One").add("Two").build();
//Type mismatch: cannot convert from List<Object> to List<String>
Run Code Online (Sandbox Code Playgroud)
这有效:
List<String> iList = new ImmutableList.Builder<String>().add("One").add("Two").build();
Run Code Online (Sandbox Code Playgroud)
我可以忍受使用,new ImmutableList.Builder<String>()但这是一个错误ImmutableList.builder()吗?
Sot*_*lis 12
不,只提供一个类型参数
List<String> iList = ImmutableList.<String>builder().add("One").add("Two").build();
Run Code Online (Sandbox Code Playgroud)
这绝不是Guava中的错误,它只是Java语言的一个特性/限制.编译器无法推断build()先前方法调用的返回类型或结果被分配给的变量的声明.
Angelika Langer 解释了这一点
自动类型参数推断.该方法与常规非泛型方法一样被调用,即不指定类型参数.在这种情况下,编译器会自动从调用上下文中推断出类型参数.
她还给出了一个类似的例子为什么实例创建表达式的类型推断失败?
String s = new ArrayList<>().iterator().next(); // error
Run Code Online (Sandbox Code Playgroud)
和州
在上面的示例中,发出了一条错误消息,因为新的-expression new ArrayList <>()没有构造函数参数,它既不出现在赋值的右侧,也不出现在方法调用的参数中.相反,它出现在一系列方法调用中.这样的链不是有效的类型推断上下文.
| 归档时间: |
|
| 查看次数: |
4124 次 |
| 最近记录: |