我在某处看到了这种模式:
class A extends B<A> { }
通过将新类型指定为泛型的实际类型,此结构对于扩展泛型有点不寻常.有什么用?这个模式有名字吗?有没有替代模式?
示例:https://code.google.com/p/selenium/wiki/LoadableComponent
跳转到:public class EditIssue扩展了LoadableComponent< EditIssue> {
编辑:
阅读完回复后,我似乎需要改变编译器对类型检查的理解.在我的脑海里,我的牛肉有这种模式,如果两个A需要相同,那么有没有办法不重复它们?但似乎没有更好的方法将派生类的类型传播给父类.
解决方法
当然,OOP的答案是A是B.如果A不是B而不是A应该只用B来构成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 } }
原文地址:https://www.jb51.cc/java/123309.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。