Kotlinで変数を定義するために「var」キーワードを使用できることを知っています。
var foo = 3
最新のJava update(Java 10)も「var」タイプを導入しています:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
私の質問は、これらの言語間の「var」の使用の違いは何ですか?
基本的な場合の構文var x = ...
は同じものになります。
Kotlinのvar
は「これは可変変数である」ことを意味し、型が推測される場合と明示的な場合の両方で使用できます:var x: String = ...
;
var
in Javaは「これは推論型の変数」を意味し、可変変数とfinal
変数の両方に使用できます。
var
in Javaはローカル変数にのみ使用でき、Kotlinのvar
はプロパティにも使用されます。
リリースノート of Java 10、
開発者がローカル変数型の頻繁に不必要なマニフェスト宣言を排除できるようにすることで、静的な型安全性に対するJavaのコミットメントを維持しながら、Javaこの機能により、たとえば次のような宣言が可能になります。
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
基本的に、プログラマーの怠に対応するためです。 List<String> list = new ArrayList<>();
を記述する代わりに、_List<String>
_を省略してvar
に置き換えることができるため、Java toinfer型list
は-変数が定義されたときに初期化されるため、これを行うことができます。初期化時にlist
の型を推論する必要があります。 (上記の場合、String
をnew ArrayList<String>();
に追加します。したがって、Javaはその静的型宣言を保持します。
Kotlinとの違いは何ですか?
var
で定義されたKotlinの変数の型も推論されます(ただし、_var foo: Int
_の場合は明示的にすることもできます)。また、Kotlinは静的に型付けされた言語です。
var
in Java 10は、ArrayList<String>
およびストリームのタイプ。
var
は、Java 10のメソッドでのみ使用できます。ただし、Kotlinのどこにでも記述できます。
また、Java 10にはval
キーワードはありません。その場合、final var
as a val
in Java 10。
(私たちはすべてデフォルトで可変および不変を知っていると思うので、それらについては説明しません。)
var
は、Intellij IDEA 2018.1+。)ではtype
(JB Lexer)とkeyword
(JB Grammar Psi)の両方と見なされます。
私はJava 10 var typeヒントがそのタイプを表示するためのプラグインを開発しました(ちょうどKotlinのように見えます)