我正在java中构建一个基类/父类,它将有几个方法来创建类本身,我想知道是否有任何方法可以让父类返回子类的实例,而不是返回父类的实例,然后将其强制转换为子类?
例如,这里是我的父类:
public abstract class SFObject
{
// Variables
protected String mID;
protected String mName;
// Function called to create ourselves from a DiffObject
public abstract SFObject CreateFromDiffObject(DiffObject object);
// Function called to create a list of ourselves from a query
public List<SFObject> CreateListFromQuery(Connection connection, String query)
{
// Run the query and loop through the results
ArrayList<SFObject> objects = new ArrayList<SFObject>();
for (DiffObject object : connection.Query(query))
objects.add(CreateFromDiffObject(object));
return objects;
}
}
如果基于sfobject类创建子类,则子类中的两个函数仍将返回sfobject(需要强制转换为子类类型)或sfobject列表(需要单独强制转换为子类类型)。是否有任何方法(可能使用反射)让我的子类将自身的实例作为自身而不是作为sfobjects返回?
最佳答案
你所描述的被称为covariant return type。
Class A {
A getInstance() { ... }
}
Class B extends A {
@Override
B getInstance() { ... }
}
从Java1.5开始就允许这样做了。