更改框架类/方法的访问级别

时间:2018-03-02 07:47:06

标签: java frameworks refactoring deprecated

在这个给定的例子中,AbstractAnimal在框架之外有很多实现。然而,该框架被重构,以便现在存在WalkingAnimals。这是所有其他动物中的狗现在将继承WalkAnimal。例如,没有动物不走路。所有的继承者都应该重构。

UML

这是一个Java框架,所以我将其称之为。但是可以更自由地更广泛地解释这个问题。因为它非常大,我们希望我们的IDE提供某种指示,表明当前继承AbstractAnimal的类应该被更改。因此我们想到了@Deprecated注释。但是,框架本身会抛出警告,因此它不一定是最干净的方法。

本质上,有一些类和方法,其访问级别将发生变化,以便只有框架才能使用它。我们想以尽可能清晰的方式在待重构的课程中宣布这一点(例如@Deprecated提供的警告和删除线)。我们的IDE是IntelliJ IDEA,我们正在使用Java 1.8。

我们正在寻找某种自动任务生成,因为开发人员可以查看警告列表并了解他们仍需要更改的内容。老板也希望看到正在取得进展,所以让这些数字变得非常可观。

提前感谢您的任何建议。

2 个答案:

答案 0 :(得分:4)

您可以做的是向名为AbstractAnimal的{​​{1}}添加抽象虚拟方法,该方法仅在youShouldNotExtendAbstractAnimalDirectly()中具有实现。这将导致WalkingAnimal中的编译失败,并且当开发人员尝试修复它时,他们会遇到该方法,并采取提示或拍摄自己的脚。

答案 1 :(得分:1)

您可以将walk方法提供给AbstractAnimal类,默认实现为抛出OperationNotSupportedException

public void walk() {
    throw new OperationNotSupportedException();
}

这是否真的取决于具体情况。

编辑: 更确切地说,正如Jeroen指出的那样,您只会发现新方法是否在运行时正确实现。因此,无论在何处使用,都可以捕获该异常;你必须做的越多,这个解决方案就越不可取。