我正在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开始就允许这样做了。

08-25 17:12