首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在使用抽象类而不是接口进行参数化的情况?

是否存在使用抽象类而不是接口进行参数化的情况?
EN

Stack Overflow用户
提问于 2010-05-10 01:17:12
回答 1查看 75关注 0票数 2

我目前正在开发一个基于组件的API,它具有很强的状态性。顶层组件每个实现大约12个接口。

因此,库存的顶级组件位于抽象实现堆栈的顶部,而抽象实现堆栈又包含多个混入实现并实现多个混入接口。

到目前为止,一切顺利(我希望如此)。

问题是基础功能的实现非常复杂(5层基类中有1000行代码),因此我不希望组件编写者自己实现接口,而是扩展我的基类(所有样板代码都已经写好了)。

因此,如果API接受接口,而不是我希望组件编写者扩展的对抽象实现的引用,那么我就有可能不会执行其他代码区域所要求和假定的验证。

因此,我的问题是,有时使用抽象实现引用而不是对其实现的接口的引用来参数化API方法是否有效?

您是否有使用此技术的设计良好的API的示例,或者我正在试图说服自己进行糟糕的实践?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-10 01:26:55

到目前为止,

还不错(我希望如此)。

不完全是。实现十几个接口不是一个好兆头。但是我不知道如何重构,或者有没有可能,因为我不知道代码。

因此,我的问题是,有时使用抽象实现引用而不是对其实现的接口的引用来参数化

方法是否有效?

很少,是的。例如(Java):

  • JSF:javax.faces.context.FacesContext是抽象的,但作为参数传递。
  • EL:javax.el.ELContext -同上。
  • AWT:java.awt.Image -同上。<代码>H213<代码>F214

但不管怎样,我会说不。将开发人员限制在实现上是不好的。他们可能想要提供一个不应该执行上述任何验证的mock,或者使用动态代理。

最后,如果你绝对确定你不能重构你的接口,你可以使用尽可能少的抽象类参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2798469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档