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

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

Step 7

色んなファイルを読んでいるところを、以下のようなクラスを作れば汎用的に使えると思ったが、

class EntityMap<T extends EntityBase> {
    private Map<String, T> entityMap;

    EntityMap(String fileName) {
        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();
                entity.fromArray(inputStr.split( "\t"));
                entityMap.put(entity.getID(), entity);
            }
            br.close();

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

    public Map<String, T> getMap() {
        return entityMap;
    }
}

ここがだめと、言われた。

                T entity = new T();

仕方なく、以下のようなクラスを作った

class EntityMap {
    private Map<String, EntityBase> entityMap;

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

                EntityBase entity = null;
                if (fileName == "gyoshu.txt")
                    entity = new Gyoshu();
                else if (fileName == "torihiki.txt")
                    entity = new Torihiki();
                else if (fileName == "kadou.txt")
                    entity = new Kadou();
                else if (fileName == "jinzai.txt")
                    entity = new Jinzai();

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

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

    public Map<String, EntityBase> getMap() {
        return entityMap;
    }
}