通过将新类型指定为通用类型的实际类型来扩展通用类型有什么好处

问题描述

当然OOP的答案是,AB。如果A不是一个BA则仅应B使用B功能来构成自己。

大概B也有一些通用的实现,它们利用了对通用类型的限制。

另一个用例是B看起来像这样:

abstract class B<T extends B<T>> {
    public T createCopy(T t);
}

现在,子类可以实现,createCopy并且客户端代码可以安全地使用它,而无需强制转换…例如

class A extends B<A> {
    public A createCopy(A t) {
        return new A(t); //copy constructor
    }
}

比较以上内容

abstract class B {
    public B createCopy(B t);
}
class A extends B {
    public B createCopy(B t) { //Is the copy an A or a different subtype of B? We don't know.
        return new A(t); //copy constructor
    }
}

解决方法

我在某处看到了这种模式:

class A extends B<A> {

}

通过将新类型指定为泛型的实际类型来扩展泛型,此结构有点不寻常。有什么用?此模式有名称吗?有其他替代方式吗?

示例:https//code.google.com/p/selenium/wiki/LoadableComponent

跳到: public class EditIssue extends LoadableComponent<EditIssue> {

编辑:阅读响应后,似乎我需要改变编译器对类型检查的理解。在我的脑海中,我有这种模式的牛肉是,如果两个A需要相同,那么有没有办法不重复它们?但是似乎没有更好的方法可以将派生类的类型传播给父类。

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”