0

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

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

这是可能的吗?尝试做这样的事情是否有意义?

4

1 回答 1

4

我知道没有特别好的方法可以做到这一点。我见过的最好的就是投射 - 当然,你可以做一次:

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 泛型的乐趣:(

于 2014-05-20T14:03:49.787 回答