JDK 10の新しい特性:ローカル変数タイプvar


概要
JAvaはオブジェクト向けの特性で世界的に著しく発展している.言語の発展の過程の中で、java言語を更に簡潔で便利に使うために、JDKも絶えず改善しています.
ここでは、JDK 10に導入されたローカル変数タイプvarについて説明します.
なぜvarが必要なの?
タイプ推定は多くのプログラミング言語が持つ特性であり、コンパイラは特定の変数タイプを指定せずにその変数の実際のタイプを推定することができます.
タイプ推定の出現は、プログラマーのコードをより柔軟にし、メンテナンスと作成を容易にすることができます.実は私たちはずっとタイプ推定まで使っています.
詳細については、
www.flydean.com
JDK 8に導入されたlambda式は、タイプ推定の非常に有用な例です.
int maxWeight = blocks.stream().filter(b -> b.getColor() == BLUE).mapToInt(Block::getWeight)
.max();

上記の例ではblocksはStreamタイプであり、filterで使用されるbは実際にはそのタイプを指定しておらず、そのタイプはStreamから推定される.
スレッドプールの例を見てみましょう.
ExecutorService executorService= Executors.newSingleThreadExecutor();
Runnable runnable=new Runnable() {
    @Override
    public void run() {
        log.info("inside runnable");
     }
 };
 executorService.submit(runnable);

多くの場合、変数の名前からこの変数がどのようなタイプなのかを知っています.では、上記の例をvarで書き換えると、このようにすることができます.
var executorService= Executors.newSingleThreadExecutor();
var runnable=new Runnable() {
    @Override
    public void run() {
         log.info("inside runnable");
     }
 };
executorService.submit(runnable);

コードはもっと簡潔で、プログラマーが書くのももっと便利です.
上記の例がvarの使用に興味を持っていない場合は、次の例はvarを喜んで使用するに違いありません.
非常に長いクラス名があれば
ItIsAVeryLongNameJavaClass itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

書くのが面倒くさいのではないでしょうか.コードも冗長に見えます.このとき、私たちはそれを簡略化することができます.
var itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();

varはどこで使われていますか
まずvarはローカル変数を表すので、ローカル変数のみがvarを使用できます.
次にvarは定義時に初期化されなければなりません.
var a;  //Invalid Declaration - - Cannot use 'var' on variable without initializer
var a = 100; //Valid Declaration

varはfor loopで使用できます.
for ( var element : elementList){
    //do something for element
}

あるいは、
for ( var i = 0 ; i < elementList.size(); i++ ){
    System.out.println( elementList.get(i) );
}

varはどこにも使えない
varはローカル変数タイプであるため、クラス変数の定義では使用できません.メソッド変数では使用できません.コンストラクション関数では使用できません.メソッド戻りでは使用できません.catch変数定義では使用できません.
public class VarIncorrectUsage {
     
    //var user;    //Not allowed as class fields
         
    //public VarIncorrectUsage(var param){    //Not allowed as parameter 
    //}
 
    /*try{
         
    } catch(var exception){    //Not allowed as catch formal 
 
    }*/
 
    /*public var returnMethod(){  //Not allowed in method return type
        return null;
    }*/
 
    /*public Integer parameterMethod( var input ){  //Not allowed in method parameters
        return null;
    }*/
}

なお、varは、JVMがそのタイプを推定できない場合や、多くのタイプがある場合には使用できません.
var ints = {1, 2, 3};
var lambda = a -> a;
var methodReference = String::concat;

上記の例では配列を初期化し、lambda式とメソッド参照はvarでは使用できません.
その他varの特徴
varはキーワードではないので、varを使用して変数の名前を作ることができます.
var var = 2;   //Valid Declaration
         
int var = 2;   //Also valid Declaration

varはJDK 10が導入した概念であるため、下向き互換ではない.低バージョンのコンパイラでvarをコンパイルすることはできません.
varはパフォーマンスに影響しません.varはコードコンパイラで行われるタイプ推定なので、パフォーマンスには影響しません.
まとめ
varはJDK 10に導入された新しい特性で、皆さんが好きになってほしいです.
本明細書の例[https://github.com/ddean2009/ learn-java-base-9-to-20](https://github.com/ddean2009/... learn-java-base-9-to-20)
本文の作者:flydeanプログラムのあれらの事
このリンク:http://www.flydean.com/jdk10-var-local-variable/
出典:flydeanのブログ
私の公衆番号に注目することを歓迎します:プログラムのあれらの事、もっとすばらしいのはあなたを待っています!