" var"的优点/缺点在Java 10中

时间:2018-04-25 12:49:19

标签: java java-10

AFAIK,var不是 Java 中的关键字。它是保留类型名称。我想知道在什么情况下我们应该使用/避免它。是否有关于其使用的原则?

import java.util.HashMap;

public class Test {
    public static void main(String[] args) {
        var x = new HashMap<> (); // legal
        var y = new HashMap<String, Integer>(); // legal

        var z = "soner"; // legal
        System.out.println(z);

        var umm = null;  // xx wrong xx //
        var foo; // xx wrong usage without initializer xx //

        var var = 5; // legal

    }
}

3 个答案:

答案 0 :(得分:12)

我知道一个原因,我们实际上在我们的项目中使用。每当有一个变量是&#34;大&#34;我们用var替换它。例如:

 public void test(){
     CreateEmailEsignTransactionAsync job = new CreateEmailEsignTransactionAsync(... some input);

     // vs 
     var job = new CreateEmailEsignTransactionAsync(... some input)
 }

我发现第二个例子更具可读性,这就是我们主要使用它的方式。

还有另一个例子可以使用它(但到目前为止我还没有使用它)。以前,这可以通过链接仅用于lambda表达式,例如,因为这只是编译器已知的类型 - 它们无法声明。

 public void test() {
        var test = new Object() {
            public void go() {

            }
        };

        test.go();
    }

答案 1 :(得分:7)

我可以看到使用var aka&#34; 本地类型推断&#34;的一个缺点:

var x = "A";
// String x
var y = getInstance(x);
//? y

在这种情况下,您需要检查getInstance(String)方法的签名,以了解y类型的内容。

编辑:

由于讨论了我的变量名称不是很正确,所以让我们使用一些真实的例子。

 var sDate = "20180426";
 var date = DateUtil.getDate(sDate);

date是什么类型的?

我可以打电话

 public static java.util.Date getDate(String);
 public static java.sql.Date getDate(String);
 public static java.time.LocalDate getDate(String);

我不相信解决方案是使用全名。

 var javaUtilDate
 var javaSqllDate
 var javaTimeLocalDate

相反,在这种情况下,我不会使用类型推断

var sDate = "20180426";
LocalDate date = DateUtil.getDate(sDate);

注意:如果我使用LocalDate,有人可以告诉我这是否需要导入var(注意我在不同的类中使用方法,所以我从来没有必须声明{ {1}}本课程。) 如果我找到安装JDK10的时间,我会自己回答。

答案 2 :(得分:3)

您也可以将它用于匿名类,即没有要声明的类型。 E.g。

{{1}}
相关问题