java - 具有多个继承类的通用返回类型的自引用方法

标签 java generics inheritance self-reference

这可能有点难以描述。不过,我会试试的;)

遵循流畅的风格,类的方法返回类实例本身(this)是很常见的。

public class A {

    public A doSomething() {

        // do something here

        return this;
    }

}

当扩展这样一个流畅的样式类时,可以在第一个继承步骤中通过泛型类型轻松完成此操作,并将返回类型转换为父类(super class)中的此泛型类型。

public class A<T extends A<T>> {

    public T doSomething() {

        // do something here

        return (T) this;
    }

}

public class B extends A<B> {

    // an extended class of class A

}

然而,当在这个扩展类上做另一个继承步骤时,我在尝试定义方法的通用返回类型(在上层类中)和类描述本身时遇到了麻烦,例如, super-super class 不会返回扩展类的类型,而是返回父类(super class)的类型。然而,我的意图是这些流畅风格的方法应该总是返回当前类的类型(而不是上层类)。

那么是否可以利用泛型定义一个解决方案呢?

PS:我知道,一个简单的解决方法可能是覆盖扩展类中的所有这些方法并将它们转换为当前类型。但是,我对更优雅的解决方案感兴趣;)

最佳答案

你可以试试:

class A<T> { }

class B<T extends A<? super T>> extends A<T> { }

class C extends B<C> { }

关于java - 具有多个继承类的通用返回类型的自引用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143404/

相关文章:

java - 选择文本需要 XPath 建议

java - Android:startActivity() 适用于一个 Activity ,但不适用于另一个 Activity

c# - 接口(interface)的通用类型约束?

java - 在参数中添加 <?> 和不添加有什么区别?

python - 是否有任何设计模式可以实现抽象类的子类方法的装饰?

java - 父类(super class)类型的对象无法访问子类的方法

java - 核心java中的原子问题

java - 关于泛型的一些困惑

C++ 多态性——调用具有不同签名的派生类方法

java - 如何在 ActiveJDBC 中实现继承模型以及父类(super class)和另一个模型之间的关联?