【发布时间】:2015-01-24 17:14:09
【问题描述】:
我有一个方法定义如下:
public TYPE getById(ObjectId id) {
return datastore.get(this.getClass(), id);
}
datastore.get()的方法签名是:
<T, V> T get(Class<T> var1, V var2);
如何正确设置方法的返回类型?注意datastore.get()返回的对象和我的实现类不是同一个类型,可以是子类。因此,我希望返回类型特定于该类。
【问题讨论】:
-
它将返回特定于您的班级类型。什么问题?
-
我希望返回类型与调用它的对象的类型相同。这个对象不一定是实现这个方法的对象,它可能是一个子类。
-
所以,返回子类类型。有什么问题?
-
Child1和Child2都扩展了Parent,实现了这个方法。我希望能够声明:Child1 c1 = new Child1().getById(123);同样,我希望能够声明:Child2 c2 = new Child2.getById(123)