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

问题描述 投票:5回答:2

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

UML

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

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

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

提前感谢您的任何建议。

java frameworks refactoring deprecated
2个回答
4
投票

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


1
投票

您可以将walk方法赋予AbstractAnimal类,并使用抛出OperationNotSupportedException的默认实现。

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

这取决于具体情况这是否是一个好主意。

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

© www.soinside.com 2019 - 2024. All rights reserved.