将方法的返回类型设置为调用对象的类型

时间:2015-01-24 07:05:47

标签: java generics

我有一个定义如下的方法:

public TYPE getById(ObjectId id) {
    return datastore.get(this.getClass(), id);
}

datastore.get()的方法签名是:

<T, V> T get(Class<T> var1, V var2);

如何正确设置方法的返回类型?请注意,datastore.get()返回的对象与我的实现类的类型不同,它可以是子类。因此,我希望返回类型特定于该类。

1 个答案:

答案 0 :(得分:1)

我的理解是你想要这样的东西:

public class Factory<T> {
  public T getById(ObjectId id) {
    return datastore.get(T, id);
  }
}

public class Class1Factory extends Factory<Class1> {
  public Class1 getById(ObjectId id) {
    return datastore.get(Class1.class, id);
  }
}

您必须使用单独的Factory类,因为您无法将类参数化为自身。你不能说:

public class Class1 extends Parent<Class1> {
  ...
}