抽象类的通用方法

时间:2012-01-03 16:24:24

标签: java generics

我有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;
 }
  1. T应该告诉调用者它应该使用的具体类。这可能吗?
  2. 如何从Model的子类的另一个方法调用此方法?我试过resultsetMap<Course>(res);,但看起来像语法错误

2 个答案:

答案 0 :(得分:2)

由于该方法是继承的,因此您可以将其称为super.<ConcModel>resultsetMap(/* arg */);this.<ConcModel>resultsetMap(/* arg */);。第二个或第一个分别基于子类是否覆盖它。

Tutorial on how to call a generic method.

答案 1 :(得分:0)

您无法调用T.getNew(),因为T的类型在运行时被删除。如果需要调用Class方法,可以传入Class对象。

在你的代码'T'中描述了一个类型,它不是任何实例,所以你不能在它上面调用方法。如果它是一个对象的实例,你无论如何都需要将它传递给方法,如果它是一个静态的方法,它就不能被覆盖。

我会考虑使用工厂模式,即将模型工厂传递给此方法。