我有public abstract class Model { //impl }
的以下方法(声明与此完全相同):
protected <T extends Model> HashMap<String, Model> resultsetMap(ResultSet res) {
HashMap<String, Model> data = new HashMap<String, Model>();
try {
while(res.next()) {
Model obj = T.getNew(res);
data.put(obj.toString(), obj);
}
} catch(SQLException e) {
return null;
}
return data;
}
T
应该告诉调用者它应该使用的具体类。这可能吗?Model
的子类的另一个方法调用此方法?我试过resultsetMap<Course>(res);
,但看起来像语法错误答案 0 :(得分:2)
由于该方法是继承的,因此您可以将其称为super.<ConcModel>resultsetMap(/* arg */);
或this.<ConcModel>resultsetMap(/* arg */);
。第二个或第一个分别基于子类是否覆盖它。
答案 1 :(得分:0)
您无法调用T.getNew()
,因为T
的类型在运行时被删除。如果需要调用Class方法,可以传入Class对象。
在你的代码'T'中描述了一个类型,它不是任何实例,所以你不能在它上面调用方法。如果它是一个对象的实例,你无论如何都需要将它传递给方法,如果它是一个静态的方法,它就不能被覆盖。
我会考虑使用工厂模式,即将模型工厂传递给此方法。