web-dev-qa-db-ja.com

「=」Java 10およびkotlin

Kotlinで変数を定義するために「var」キーワードを使用できることを知っています。

var foo = 3

最新のJava update(Java 10)も「var」タイプを導入しています:

var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}

私の質問は、これらの言語間の「var」の使用の違いは何ですか?

22
Caleb
  1. 基本的な場合の構文var x = ...は同じものになります。

    1. Kotlinのvarは「これは可変変数である」ことを意味し、型が推測される場合と明示的な場合の両方で使用できます:var x: String = ...;

    2. var in Javaは「これは推論型の変数」を意味し、可変変数とfinal変数の両方に使用できます。

  2. var in Javaはローカル変数にのみ使用でき、Kotlinのvarはプロパティにも使用されます。

28
Alexey Romanov

リリースノート 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 toinferlistは-変数が定義されたときに初期化されるため、これを行うことができます。初期化時にlistの型を推論する必要があります。 (上記の場合、Stringnew ArrayList<String>();に追加します。したがって、Javaはその静的型宣言を保持します。

Kotlinとの違いは何ですか?

varで定義されたKotlinの変数の型も推論されます(ただし、_var foo: Int_の場合は明示的にすることもできます)。また、Kotlinは静的に型付けされた言語です。

13
eli
  • 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のように見えます)

5
Sin