【问题标题】:What is the benefit of extending an interface AGAIN which is already extended by its parent?再次扩展已经由其父级扩展的接口有什么好处?
【发布时间】:2018-12-07 00:40:10
【问题描述】:

说,我有以下代码:

interface IAAA {
    void aaa();
}

interface IBBB extends IAAA {
    void bbb();
}

class MyClass implements IAAA, IBBB {
    public void bbb() { }
    public void aaa() { }
}

MyClass 中实现IAAA 有什么好处吗? 如您所见,IAAA 已经被IBBB 扩展,MyClass 正在实现IAAAIBBB。从MyClass 中删除IAAA 似乎不会影响任何事情。

我问这个愚蠢的问题的原因是, 我经常在 Android 开源项目 中看到这种模式,有时甚至在标准的 Java API 中,例如 ArrayList

我想说的一个例子是SpannableStringBuilder

Spanned 接口扩展了CharSequence 接口。

Spannable 接口扩展了Spanned 接口。

Editable 接口扩展了CharSequenceSpannable 接口。

SpannableStringBuilder 类实现了CharSequenceSpannableEditable 接口 AGAIN。

我真的不明白。这样做有什么意义?何必呢?

【问题讨论】:

  • Android 是一个大团队。我敢打赌,不是 android 团队中的每个人都这样做。并非这个团队中的每个人都是专家。

标签: java android interface


【解决方案1】:

没有技术原因。它可能会使维护变得更容易 - 如果 Bar 扩展了 Foo 并且您想要找到所有实现 Foo 的类,您只需查找 Foo 而不是 Foo 和 Bar。

【讨论】:

    【解决方案2】:

    文档,强化了MyClass 必须实现IAAA 的事实,而无需强迫(人类)代码阅读者查看IBBB 即可知道这一点。

    【讨论】:

    • 是的,就我个人而言,我几乎总是阅读 API 文档,但并不是每个人都这样做,有时没有可靠的文档,所以你说的很有道理。
    猜你喜欢
    • 1970-01-01
    • 2019-05-22
    • 2023-03-21
    • 2012-07-07
    • 2012-11-06
    • 1970-01-01
    • 2011-11-27
    • 2018-01-01
    • 2015-08-09
    相关资源
    最近更新 更多