之前项目中有一段逻辑:接收消息、解析、校验、业务处理。一开始代码显得冗余,然后改成模板方法。发现不同消息体解析成不同的类。
public abstract class Tests {
public void handler(String message) {
InfoA infoA = parse(message);
try {
process(infoA);
} catch (Exception e) {
exceptionHandler(message, e);
}
}
private InfoA parse(String message) {
// 省略
return new InfoA();
}
abstract void process(InfoA infoA);
abstract void exceptionHandler(String message, Exception e);
}
此时是个具体类,为了消除类型,改成范型如下:
public abstract class Tests<T> {
public void handler(String message) {
T infoA = parse(message);
try {
process(infoA);
} catch (Exception e) {
exceptionHandler(message, e);
}
}
T parse(String message) {
// XXX 怎么写?