如何从超类方法返回子类引用

时间:2014-05-20 13:58:20

标签: java inheritance builder-pattern

我有一个返回自身的超类方法(对于构建器模式)。这个类有几个子类,所以我想返回对象的实际(子类)类型的引用。像这样:

class SuperClass {
   T someMethodThatDoesSameThingForAllSubclasses() {

    // blablbal
    return reference_of_actual_object;

  }

}

这样我就可以从子类引用中调用其他子类方法而不进行转换。像这样:

SubClass obj=new SubClass(); 
obj.someMethodThatDoesSameThingForAllSubclasses().someSubclassMethod();
//currently this gives compiler error.  because first method returns superclass reference and super class doesn't have     someSubclassMethod

这是否可行,尝试做这样的事情是否有意义?

1 个答案:

答案 0 :(得分:3)

我没有特别好的方法,我知道。我见过的最好的只是演员 - 你当然可以做一次:

public class Superclass<T extends Superclass<T>> {
    @SuppressWarnings("unchecked")
    private final T thisAsT = (T) this;

    T someMethodThatDoesSameThingForAllSubclasses() {
       return thisAsT;
    }
}

public class Subclass extends Superclass<Subclass> {
    Subclass subclassOnlyMethod() {
        return this;
    }
}

然后:

Subclass subclass = new Subclass().someMethodThatDoesSameThingForAllSubclasses()
                                  .subclassOnlyMethod();

由于类型删除,演员实际上没有检查任何内容,这太可怕了,但这是Java泛型的乐趣:(