毫无疑问,Java在语法上是冗长的!其他编程语言中只要一行就能实现的功能在Java中需要几行,这是由于Java是一种静态类型语言,出于这个原因,初学者发现Java有点令人生畏。但是有一个工具可以让我们更容易
#Python 3
foo = "bar"
print(foo)
// JavaScript
var foo = "bar";
console.log(foo);
// JavaScript
var foo = "bar";
console.log(foo);
// Java 的字数比较多
String foo = "NOT bar";
System.out.println(foo);
Java构造似乎与其他构造没有太大的不同。但是,要成功在非REPL环境中运行,如果要引入一个类,需要完整的类的文件名称(不包括.java这个扩展名),简而言之,需要编写不必要的长代码,才能在Java中执行非常简单的操作。
JEP 286救援
Java的9发布后不久,Java 10又发布了,java 9带来的Java程序员的模块系统,JShell,Javadoc搜索功能,多版本jar和其他一些有趣的功能,让程序员的生活更轻松。由于JDK增强建议(JEP)286,Java 10引入了var 。
JEP 286唯一目标是:局部变量类型推断,var让编译器为你推断省略了类型声明的变量类型,类型推断不是新的 - 如果您在Java 7或更高版本中使用过泛型,则会使用菱形(<>)来省略类型。其他一些流行的静态类型语言已经为局部变量类型推断提供了某种支持,比如Go,C#,Scala甚至C ++,Java迟到了。尽管如此,Java开发人员对这种有趣的包含感到兴奋。
应该注意var并不是Java中的关键字。它只是一个具有特殊含义的标识符,作为局部变量声明的类型。如果您还没有注意到,var仅适用于本地上下文,一旦进入main方法(以及任何其他本地上下文),您就可以将var用于局部变量声明。
用法
使用var时,编译器应该能够立即推断出类型,(否则将失败。)此外,var变量不能保持值null,并且它不能用作类的名称。
// Okay! Type inferred
var foo = "bar";
// Not allowed! Type cannot be inferred
var foo1;
//variable initializer is null
var oh = null;
//as of release 10, 'var' is a restricted local variable type and cannot be used for type declarations
class var {}
第二个表达式失败,编译器显示无法推断局部变量foo1的类型(在没有初始化程序的情况下不能对变量使用'var')。
另外,var不允许声明多个变量。
//Not allowed
//'var' is not allowed in a compound declaration
var foo = "bar", line = 1;
同样,var不能用于声明数组。伤心!
//Not Allowed
//'var' is not allowed as an element type of an array
var lot[] = new int[10];
Var lot[] = {1, 2, 4};
// This is PERMITTED
var lot = new ArrayList<Integer>();
var b = List.of(1, 2, 3, 4);
另外,var也不允许进行自引用。
// Not allowed
//cannot use 'var' on self-referencing variable
var self = (self = "me");
//一旦变量被声明,分配不同的类型会失败
// Okay
var foo = 33;
foo = 45;
// Not Allowed
// Error: incompatible types: possible lossy conversion from double to int
foo = 33.0;
但是,var非常适合循环,因为它减少了必须编写的代码行。在以下循环中查看它的实际操作。
for(var i = 0; i < 10; i++)
System.out.println(i);
System.out.println("Fire!");
// print 0 to 9, then Fire!
另请注意,参数不允许使用var,很容易犯这个错误。
结论
通过了解在Java 10中使用var的注意事项,你应该能够减少编写的代码量,并可能节省一些时间,虽然var看起来像是一个小功能添加,但Java开发人员肯定会经常使用它的,切换到Java 10后,你一定要充分利用它。