考虑以下不带任何参数的泛型方法的示例:
private <T> Set<T> create() {
return new HashSet<T>();
}
Run Code Online (Sandbox Code Playgroud)
根据文档,类型将根据返回值的使用方式(即在赋值期间)从定义的 LHS 类型推断,例如:
Set<Integer> numbers = create();
Run Code Online (Sandbox Code Playgroud)
使用关键字时效果如何var?
将编译以下内容:
var numbers = create();
Run Code Online (Sandbox Code Playgroud)
有关局部变量类型推断的常见问题解答描述了发生的情况:
\n\n\nQ8. 您可以使用右侧带有菱形的 var 吗?
\n是的,它可以工作,但它\xe2\x80\x99可能不是你想要的。考虑:
\nRun Code Online (Sandbox Code Playgroud)\nvar list = new ArrayList<>();\n这将推断列表的类型为
\nArrayList<Object>。一般来说,最好在左侧使用显式类型,在右侧使用菱形,或者在左侧使用 var,在右侧使用显式类型。有关详细信息,请参阅LVTI 风格指南、指南 G6。
该指南 G6 还指出:
\n\n\n为了进行推理,diamond 可以使用目标类型(通常是声明的左侧)或构造函数参数的类型。如果两者都不存在,则它会退回到最广泛的适用类型,通常是
\nObject。这通常不是我们想要的。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |