Search on the blog

2013年9月4日水曜日

イニシャライザブロックと無名クラスで初期化する

今日仕事中かっこいいコードに遭遇したので、忘れないうちにメモっておく。

例えば以下のようなクラスがあるとする。
メンバ変数fruitsはコンストラクタの中で初期化される。

package com.kenjih.test;

import java.util.HashMap;
import java.util.Map;

public class Clazz {
    Map<String, String> fruits = new HashMap<String, String>();
    
    public Clazz() {
        fruits.put("RED", "APPLE");
        fruits.put("YELLOW", "BANANA");
        fruits.put("GREEN", "KIWI");
    }
    
    public void run() {
        for (String key : fruits.keySet()) {
            System.out.println(key + "->" + fruits.get(key));
        }
    }
    
    public static void main(String[] args) {
        new Clazz().run();
    }
}

これをイニシャライザブロックと無名クラスを使うと以下のように書ける。なんかJavaできそうな雰囲気が漂っていてかっこいい。今度機会があれば真似しようっと。

package com.kenjih.test;

import java.util.HashMap;
import java.util.Map;

public class Clazz {
    Map<String, String> fruits = new HashMap<String, String>() {
        {
            put("RED", "APPLE");
            put("YELLOW", "BANANA");
            put("GREEN", "KIWI");
        }
    };
    
    public void run() {
        for (String key : fruits.keySet()) {
            System.out.println(key + "->" + fruits.get(key));
        }
    }
    
    public static void main(String[] args) {
        new Clazz().run();
    }
}

0 件のコメント:

コメントを投稿