class MyThing {
protected HashMap fields;
protected MyThing(HashMap newFields){
fields.putAll(newFields);
}
protected Object get(String key){
return fields.get(key);
}
}
现在有点背景.我使用这个类作为一个超类来代表一堆不同的类,它们代表XML文件中的对象.这基本上是API包装器的实现,我将其用作API中的解析XML和数据库之间的适配器.转换被委托给get方法的调用者.如果子类在创建时或者返回变量时需要执行某些操作,则只需调用super,然后操作之后返回的内容.例如.:
class Event extends MyThing {
public Event(HashMap 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方法.它可以节省时间,而且非常自我解释.
现在这显然是“unJavalike”,而且更像是一种半语言的做事方式,但是有理由说我绝对不应该这样做吗?