Плохо ли это использование нетипизированного класса-оболочки вокруг объектов, хранящихся в XML?

class MyThing {
    protected HashMap<String,Object> fields;

    protected MyThing(HashMap<String,Object> newFields){
        fields.putAll(newFields);
    }

    protected Object get(String key){
        return fields.get(key);
    }
}

Теперь немного предыстории. Я использую этот класс как суперкласс для множества разных классов, которые представляют объекты из файла XML. По сути, это реализация оболочки API, и я использую ее в качестве адаптера между анализируемым XML из API и базой данных. Приведение делегируется вызывающей стороне метода get. Если подклассам нужно что-то делать при создании или при возврате переменной, они просто вызывают super, а затем манипулируют тем, что возвращается после этого. Например :

class Event extends MyThing {       
    public Event(HashMap<String,Object> newFields){
        super(newFields);

        // Removes anything after an @ symbol in returned data
        Pattern p = Pattern.compile("\\@.*$");
        Matcher m = p.matcher((String)fields.get("id"));
        boolean result = m.find();

        if (result)
            fields.put("id", m.replaceFirst(""));
        }
    }

    public Object get(String key){
        Object obj = super(key);

        if (key.equals("name")){
            return "Mr./Mrs. " + ((String)obj);
        }
    }
}

Причина, по которой я чувствую, что я должен это сделать, заключается в том, что мне не нужно писать методы getId, getName, getWhatever для каждого отдельного подкласса только потому, что они имеют разные атрибуты. Это сэкономило бы время, и это довольно понятно.

Теперь это, очевидно, "не Javalike" и больше похоже на утиный языковой способ делать вещи, но есть ли логическая причина, по которой мне категорически не следует этого делать?

5
задан Gordon Gustafson 16 December 2010 в 20:05
поделиться