Java8のエンジニアだった筆者がJava11の案件に参画し、varの変数のうまいなーと思う使い方があったので紹介したい。
Javaのvar変数の特徴
Javaでvar変数はJava8では使えなかったが、Java11では使えるようになった。ただし、Javaのvar変数の使用に関しては以下のような制約を含んでいる。
- 左辺でvar変数の宣言をした場合、右辺でどの型の指定をしなくてはいけない。
- var変数としては処理しておらず(JavScriptのように)、結局右側で提示した変数の処理として処理される。
上記2つの制約を守れば、Javaでvar変数を使用することはできるわけではある。
しかし、特段変数宣言を左右で行う従来の宣言と何が違うのか分からなかったのが、従来の思想であった。
こんな使い方
感心させられた使い方はこんな使い方である。
ただし、実際に書いてあるソースコードとは違うもので、大体同じような構成になっていたと考えてよい。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
List<String> list = new ArrayList<String>();
list.add("dummy");
List<Object> list2 = new ArrayList<Object>();
list2.add(list);
Optional<Object> opt = Optional.ofNullable(list2);
var varTest = (ArrayList<Object>)opt.orElse(new ArrayList<Object>()); //varのこの使い方はうまいなと
System.out.println(varTest.get(0));
Object objectTest = opt.orElse(new ArrayList<Object>());
List<Object> listTest = (ArrayList<Object>)opt.orElse(new ArrayList<Object>());
}
}
Objectで変数処理しようとすると後続処理でArrayListの特徴を使えないしな、かといってlistで変数を新規に宣言してもどうせ右側でキャストしないと入れることもできないと思うとこの書き方が一番しっくりきている筆者である。
やはり先代が組んだソースを読むのも面白い。
新規でプログラミングするわけではないなら
どうせ既存の仕様を把握してプログラムの改善をソースコードに記載するのであれば、どんな組み方をしているのかを考えてみるのもありかと思われる。
余談 そんな上司であったが
最近ソースコードを上司から渡されることが多く、ソースコードが読むことが多い。
そんな時に上司が組んだコードを見ているとやたらめったらvarを使ったんで質問してみるとやはりjavascriptと同じ感覚で使っているらしい
個人的には新人来たら読めないだろうなと感じる。。。
まあ、そんなコードでも別の上司はコードレビューokだったりするんで案件全体でvarの使用方法にかんして議論してはという個人的な感想を付け加えておく。
#Java silverの資格取得が難しい
Java11になってvarが追加され細かいvarのルールも把握しておく必要が資格取得には必要となることが判明した。(過去問を解く中で)。結構面倒と感じることが。