【问题标题】:Optional methods without cluttering extending types可选方法,不会弄乱扩展类型
【发布时间】:2014-03-30 19:50:20
【问题描述】:

这是一个最佳实践类型的问题。

假设我有一个抽象类Screen,它实现了一些接口。

现在的问题是,接口添加了大量方法,我敢肯定并非所有屏幕实现都会使用它们。

我想知道最常见和最干净的方法是什么。

  1. 让它们抽象

    在扩展类中添加混乱

    protected abstract void onFocus();
    
  2. 添加空正文

    对于不熟悉扩展类的人来说不好,他们可能会担心是否可以覆盖它们。

    protected void onFocus() {
        // no impl
    }
    
  3. 做一些描述注释?

    我不确定这对他们有没有用处。

    @NotImplemented
    protected void onFocus() {
        // no impl
    }
    

你认为什么最好?

【问题讨论】:

  • 我喜欢第一个选项,如果每个 Screen 对此方法有不同的实现,或者他们可以选择不通过抛出 NotSupportedOperationException 或类似的东西来选择不实现
  • 在 Java 8 中,您还可以在接口本身中实现 ​​default 方法。
  • 我知道,不幸的是我认为至少需要两年时间才能将 Java 8 用于生产环境。
  • 在这种情况下,通常的做法是实现它们并让它们抛出某种NotImplementedException

标签: java oop interface


【解决方案1】:

只有选项二(添加空正文)保留“可选”方法的要求。我宁愿不强制所有扩展程序实现所有可选方法,这将使它们不是可选的,对吧?可能您可以编写基本抽象类/类来提供一些默认行为,这将使您使用 API 更简单。 SpirngMVC 正在使用这种模式来允许您在控制器的不同生命周期中执行一些逻辑。

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 2021-10-08
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多