lombok 或 java 'var' 有用的用例
Use cases when lombok or java 'var' is useful
var
当您浏览代码并调查乍一看不清楚的代码时,它不是很方便。当开发人员使用非自我描述的方法名称时,您必须花一些时间来了解什么是变量的真实类型。如果你使用 lombok 的 var
你将与 lombok 紧密耦合,所以我不会在我的代码中经常使用它
在 java 中使用 var
有哪些有用的用例?
支持var
的论点:
var
需要更少的输入。它比 Map<Integer, ArrayList<String>>
. 更短,有时更容易阅读
如果 return 类型的方法调用发生变化,var
需要较少的代码更改。您只需要更改方法调用,而不是每个使用它的地方。
var
鼓励使用更具描述性的变量名称。 IE。 var customer = new Customer();
而不是 var c = new Customer();
.
反对var
的论据:
var
掩盖了实际的变量类型。如果初始化程序没有 return 明确定义的类型,您可能无法分辨变量的类型。
- 使用
var
是懒惰的。尽管 var
肯定比 Map<Integer, ArrayList<String>>
更容易输入,但如果变量名称命名不当,您必须更深入地搜索才能知道它指的是什么。
var
让人更难知道底层变量的实际类型。
- 您不能在所有情况下都使用
var
。像:
var i=1,j=2;
- var
一次只接受一个变量。
var arr={1,2,3};
- 数组必须显式声明。
var f=a->a+" ";
- 无法确定此 lambda 函数的类型。
var f=String::replace;
- 不能使用方法引用,因为它们本身没有类型。
其中大部分取自 this post for when to use var
in .NET C#,其中 var
关键字从一开始就存在,而 Java 仅在版本 10 后可用。
哦,还有 var
的另一大优势:它比 code-golfing 更短(创建一个 program/function,它用尽可能少的字节执行某些 task/challenge) . :) 这可能是我不介意添加它的主要原因,因为我经常在 Java(以及 .NET C#、05AB1E 和 Whitespace)中编写代码。
相关:Java7的菱形运算符。 List<String> names = new ArrayList<>();
对比 List<String> names = new ArrayList<String>();
.
我个人仍然使用写出的类型而不是 var
,除了打代码。但也许我只需要在更频繁地使用它之前再习惯它一点。为了可读性,并且无需挖掘就可以更清楚、更容易地看到类型,我根本不使用 var
。至于 Java 7 的菱形运算符,我只在字段后直接实例化它时使用它,但在其他地方实例化它时不会使用它(即我会使用 List<String> names = new ArrayList<>();
,而不是 List<String> names; /* ... some code here ...*/ names = new ArrayList<>();
).
不过,总的来说,这一切都归结为偏好。
var
当您浏览代码并调查乍一看不清楚的代码时,它不是很方便。当开发人员使用非自我描述的方法名称时,您必须花一些时间来了解什么是变量的真实类型。如果你使用 lombok 的 var
你将与 lombok 紧密耦合,所以我不会在我的代码中经常使用它
在 java 中使用 var
有哪些有用的用例?
支持var
的论点:
var
需要更少的输入。它比Map<Integer, ArrayList<String>>
. 更短,有时更容易阅读
如果 return 类型的方法调用发生变化,var
需要较少的代码更改。您只需要更改方法调用,而不是每个使用它的地方。var
鼓励使用更具描述性的变量名称。 IE。var customer = new Customer();
而不是var c = new Customer();
.
反对var
的论据:
var
掩盖了实际的变量类型。如果初始化程序没有 return 明确定义的类型,您可能无法分辨变量的类型。- 使用
var
是懒惰的。尽管var
肯定比Map<Integer, ArrayList<String>>
更容易输入,但如果变量名称命名不当,您必须更深入地搜索才能知道它指的是什么。 var
让人更难知道底层变量的实际类型。- 您不能在所有情况下都使用
var
。像:var i=1,j=2;
-var
一次只接受一个变量。var arr={1,2,3};
- 数组必须显式声明。var f=a->a+" ";
- 无法确定此 lambda 函数的类型。var f=String::replace;
- 不能使用方法引用,因为它们本身没有类型。
其中大部分取自 this post for when to use var
in .NET C#,其中 var
关键字从一开始就存在,而 Java 仅在版本 10 后可用。
哦,还有 var
的另一大优势:它比 code-golfing 更短(创建一个 program/function,它用尽可能少的字节执行某些 task/challenge) . :) 这可能是我不介意添加它的主要原因,因为我经常在 Java(以及 .NET C#、05AB1E 和 Whitespace)中编写代码。
相关:Java7的菱形运算符。 List<String> names = new ArrayList<>();
对比 List<String> names = new ArrayList<String>();
.
我个人仍然使用写出的类型而不是 var
,除了打代码。但也许我只需要在更频繁地使用它之前再习惯它一点。为了可读性,并且无需挖掘就可以更清楚、更容易地看到类型,我根本不使用 var
。至于 Java 7 的菱形运算符,我只在字段后直接实例化它时使用它,但在其他地方实例化它时不会使用它(即我会使用 List<String> names = new ArrayList<>();
,而不是 List<String> names; /* ... some code here ...*/ names = new ArrayList<>();
).
不过,总的来说,这一切都归结为偏好。