次に欲しい短縮構文

XMLリテラルとかプロパティアクセッサはいいから、こんなのが欲しい。

Listアクセス

Listの要素を配列と同じ形で操作

ArrayList list = new ArrayList();
list.add("apple");
list.add("grape");
list.add("lemon");

があるときに

System.out.println(list[2]);

で"lemon"を表示。実際には

System.out.println(list.get(2));

に展開(さらにnew Integerに展開される)
あと

list[1] = "orange";


list.set(1, "orange");
に展開
と思ったけど式(list[1] = "orange")が"orange"を返すようにしないといけないのでCollectionsあたりにメソッドを追加して

Collections.listAssign(list, 1, "orange");

なんかに展開。listAssignメソッドは3番目の引数をそのまま返す。

Mapアクセス

Mapの要素を配列と同じ形で操作

HashMap map = new HashMap();
map.put("apple", "りんご");
map.put("grape", "ぶどう");

があるときに

System.out.println(map["apple"]);

で"りんご"を表示。実際には

System.out.println(map.get("apple"));

に展開される。
あと、

map["lemon"] = "レモン";

map.put("lemon", "レモン");

に展開。
と思ったけど、これも式(map["lemon"] = "レモン")が"レモン"を返すようにしないといけないのでCollectionsあたりにメソッドを追加して

Collections.mapAssign(map, "lemon", "レモン");

なんかに展開。mapAssignメソッドは3番目の引数をそのまま返す。

Listリテラル

配列と同じ書式で初期化。

ArrayList list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);

ArrayList list = {1, 2, 3};

と書ける。初期化以外の場合では

list = new ArrayList{1, 2, 3};

と書く。この場合も、=演算子の右辺が=演算子の値にならないといけないので実際にはCollectionsあたりにメソッドを追加して

list = Collections.listInitialize(
        new ArrayList(), 
        new Object[]{1, 2, 3});

などと展開する。

Mapリテラル

配列と同じ書式で初期化。

HashMap map = new HashMap();
m.put("apple", "りんご");
m.put("grape", "ぶどう");

HashMap map = {"apple":"りんご", "grape":"ぶどう"};

と書ける。初期化以外の場合では

map = new HashMap{"apple":"りんご", "grape":"ぶどう"};

などと書く。やっぱり代入式のためにCollectionsあたりにメソッドを追加して

map = Collections.mapInitialize(
        new HashMap(), 
        new Object{"apple", "grape"}, 
        new Object{"りんご", "ぶどう"});

コンストラクリテラル

変数の初期化時に、コンストラクタのクラス名の記述を省略

Point p = new Point(120, 115);

Point p = new(120, 115);

と記述。または

Point p = [120, 115];

と記述。new演算子を使わないなら、「(...)」の場合に単値とあいまいになり、「{...}」の場合はArrayListのときにListリテラルとコンストラクタ呼び出しを区別できない。

JButton b = ["押してね"];

とか書けると結構ステキ。

JFileChooser chooser = [];

とか書けるのもステキ。


そうすると

ArrayList points = {[10, 15], [120, 44], [100, 20]};

などと書ける。

HashMap> surfaces = {
	{"三角":{[10, 15], [120, 44], [100, 20]}}, 
	{"四角":{[10, 15], [120, 20], [100, 80], [6, 70]}}};

などとも書ける。配列を使って

HashMap surfaces = {
	{"三角":{[10, 15], [120, 44], [100, 20]}}, 
	{"四角":{[10, 15], [120, 20], [100, 80], [6, 70]}}};

などとも書ける。