「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されて

ryoasai さんの「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されたので、
Java の勉強がてら、同様なプログラムを作成してみる。

Step 10

Step 7 で、以下のようなコーディングはできないと書いたが、

                T entity = new T();

ryoasai さんから、コメント欄でご指導があったので、
修正してみる

// 各マスタ の レコード一覧
class EntityMap<T extends EntityBase> {
    protected String searchStr;
    private Map<String, T> entityMap;

    public Map<String, T> getMap(String fileName, String searchStr, Class<T> entityClass) {
        if (entityMap != null) return entityMap;

        this.searchStr = searchStr;

        try {
            entityMap = new LinkedHashMap<String, T>();
            FileReader fr = new FileReader(fileName);
            BufferedReader br = new BufferedReader(fr);
            String inputStr;
            while ((inputStr = br.readLine()) != null) {
                if (!inputStr.endsWith("\t")) continue;

                // T entity = new T(); これは できない
                // 以下のようにすればよい
                T entity = entityClass.newInstance();

                entity.fromArray(inputStr.split( "\t"));
                if (!isValid(entity)) continue;
                entityMap.put(entity.getID(), entity);
            }
            br.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return entityMap;
    }

    protected boolean isValid(T entity) {
        return true;
    }
}

呼び出し側は、以下のように修正

    entityMap.getMap("gyoshu.txt", "");

    entityMap.getMap("gyoshu.txt", "", Gyoshu.class);