3

有一个场景,我有接口 X,它已经用我的数千个类实现了。现在我想在那个接口 X 中添加新方法。那么如何以最小的方式进行更改以解决我所有类中方法被覆盖的问题

4

4 回答 4

7

如果方法实现对所有类都是通用的,那么也许anabstract class更好interface

如果不是 - 无论如何你都要编写这些方法。


(*)最初是评论,但我被要求将其作为答案。

于 2012-05-01T08:48:44.980 回答
2
  1. 如果您的新方法对该接口的所有实现都没有意义,请不要在其中添加它 - 创建一个扩展原始接口的新接口
  2. 如果您的所有数千个类都应该有一个默认实现 - 将您的接口更改为抽象类
于 2012-05-01T08:50:12.923 回答
0

如果您不介意在所有类中无操作实现此方法并且可以控制所有实现类,那么这是一种非常简单的方法,可以通过 IntelliJ 分 3 步执行此操作,而无需访问每个类:

  1. 将您的方法添加到接口
  2. 选择一个方法并调用 Refactor->Push Down... - 您的方法声明将出现在所有实现此接口的类中,但至少在我的 IntelliJ IDEA 版本(11.0.2)中它们将没有实现,例如void doSomething();,所以选择这个定义并做一个完整的项目查找和替换来用你的默认实现替换这个字符串,例如,

    @Override void doSomething() {}

  3. 再次将您的方法添加到接口。

于 2012-05-01T16:02:29.780 回答
0

除了其他建议(make itabstractextendthe interface)之外,还有另一种选择:

使接口的所有实现者扩展一个基类。这样,当您向 中添加方法时,interface您只需向基类添加默认行为并将特定于类的行为(希望)添加到少数实现者。

于 2012-05-01T09:14:42.183 回答