在c#中var关键字的一种用法是隐式类型声明。Java中var的等效语法是什么?
当前回答
我已经为IntelliJ编写了一个插件,在某种程度上,它可以在Java中为您提供var。这是一个黑客,所以通常的免责声明也适用,但如果你在Java开发中使用IntelliJ并想尝试一下,请访问https://bitbucket.org/balpha/varsity。
其他回答
一个简单的解决方案(假设你使用的是一个不错的IDE)是在所有地方输入'int',然后让它为你设置类型。
实际上我只是添加了一个名为var的类,所以我不需要输入不同的东西。
代码仍然过于冗长,但至少您不必键入它!
JEP - JDK增强提案
http://openjdk.java.net/jeps/286
JEP 286:局部变量类型推断
作者Brian Goetz
// Goals:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
Java 10确实得到了局部变量类型推断,所以现在它有var,这与c#相当(据我所知)。
它还可以推断出不可标记的类型(程序员无法在该位置命名的类型;尽管哪些类型是不可标记的是不同的)。参见var和匿名类的技巧(你永远不应该在工作中使用)。
我能发现的一个区别是,在c#中,
如果一个名为var的类型在作用域中,那么var关键字将解析为该类型名称,并且不会被视为隐式类型局部变量声明的一部分。
在Java 10中,var不是一个合法的类型名称。
如果您将Lombok添加到项目中,您可以使用它的val关键字。
http://projectlombok.org/features/val.html
JDK 10将支持它。甚至可以在早期访问版本中看到它的作用。
JEP 286:
增强Java语言,将类型推断扩展到带有初始化式的局部变量声明。
所以现在不要写:
List<> list = new ArrayList<String>();
Stream<> stream = myStream();
你写的:
var list = new ArrayList<String>();
var stream = myStream();
注:
Var现在是一个保留类型名 Java仍然致力于静态类型! 它只能在局部变量声明中使用
如果你想尝试一下,而不是在本地系统上安装Java,我创建了一个安装了JDK 10的Docker镜像:
$ docker run -it marounbassam/ubuntu-java10 bash
root@299d86f1c39a:/# jdk-10/bin/jshell
Mar 30, 2018 9:07:07 PM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
| Welcome to JShell -- Version 10
| For an introduction type: /help intro
jshell> var list = new ArrayList<String>();
list ==> []
推荐文章
- 如何在java中格式化持续时间?(如格式H:MM:SS)
- urlencoder .encode(字符串)已弃用,我应该使用什么代替?
- javax.transaction.Transactional vs . org.springframework.transaction.annotation.Transactional
- Java 8接口方法中不允许“同步”的原因是什么?
- 如何找到Java堆大小和内存使用(Linux)?
- 使用Enum实现单例(Java)
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?