我有一个返回自身的超类方法(对于构建器模式)。这个类有几个子类,所以我想返回对象的实际(子类)类型的引用。像这样:
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
这是否可行,尝试做这样的事情是否有意义?
答案 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泛型的乐趣:(