如何确定Java函数的副作用?

sda*_*das 7 java eclipse

我正在处理一个对象,特别是它的一个函数,它看起来像这样:

public class Dog {
    private ArrayList<Paw> paws;
    private double age;
    private Tongue tongue;

    public Dog(ArrayList<Paw> paws, double age, Tongue tongue) {
        this.paws = paws;
        this.age = age;
        this.tongue = tongue;
    }

    public void bark() {
        // ... about 100 lines of side effects operating
        // on the object's global members ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我真的想要修复这些副作用并将对象重构为只做一件事的函数.

Eclipse中是否有自动化过程来标记可能的副作用?

如果没有,是否有我可以遵循的手动算法,所以我不会迷失在兔子洞里?

ben*_*y23 8

我会创建一个单元测试来测试你的旧Dog课程,包括所有"副作用"(不太清楚你的意思).

假设您的单元测试通过,您可以开始重构(使用Eclipse,选择适当的行并使用右键单击,Refactor,Extract Method可能是您的朋友)并继续使用单元测试来检查重构是否已经破坏了任何内容.

编辑:

要找出更改您PawTongue类的属性的其他内容,您可以在任何使用的属性上设置修改观察点(即在属性上设置断点,右键单击断点,断点属性,取消"访问")bark(),然后您正在调试器中运行您的应用程序,每当任何更改属性时,调试器将停止.

  • 我差点投了反对票。如果一个方法是产生大量副作用的 100 行代码,那么创建单元测试几乎是不可能的。听起来 OP 不知道代码应该做什么,这就是他重构以理解它的原因。_After_ OP 已重构为“只做一件事的函数”,然后他/她可以编写单元测试。 (2认同)