gpt4 book ai didi

java - 如何用辅助方法解决脆弱的基类

转载 作者:行者123 更新时间:2023-12-02 13:41:58 24 4
gpt4 key购买 nike

我已经理解了脆弱的基类问题,并且我知道我们可以使用组合优于继承或在父类(super class)中声明私有(private)方法来解决它。现在我试图了解如何使用辅助方法解决这个问题,所以我将放置脆弱基类的经典代码,然后我将用辅助方法放置我的解决方案,如果我做错了什么,请告诉我。

这是一个脆弱基类的代码(来自维基百科)

public class JavaApplicationProvaHello {


public class A {
private int i;

public void inc1(){
i++;
}

public void inc2(){
inc1();
}
}
//---------------------------
public class B extends A{
@Override
public void inc1(){
inc2();
}
}
//------------------------
public class Test{
public static void main(String[] args) {
B b = new B();
b.inc1();
}
}
}

现在我更改类 A 并放置两个私有(private)辅助方法,它们将由公共(public)方法 inc1 和 inc2 调用

public class A {
protected int i;

public void inc1(){
inc1Helper();
}

public void inc2(){
inc2Helper();
}

private void inc1Helper(){
i++;
}

private void inc2Helper(){
inc1Helper();
}
}

在我的编译器中一切正常,我问自己这是否是使用辅助方法解决脆弱基类的最佳解决方案。感谢您的关注。

最佳答案

“最佳”是一种意见。

在我看来,更好的答案是在 inc2() 上留下 Javadoc 注释,说明它调用 inc1()

/** Increments <code>i</code> by calling <code>inc1()</code> */
public void inc2()
...

然后任何扩展 A 的人都可以在文档中看到这一点。如果他们错过了,那么当他们查看堆栈跟踪以查找堆栈溢出异常时就会知道。

这种方式仍然需要文件中的几行,但不需要更多实际的功能逻辑代码行,也不需要更多生成的字节代码。您提到的维基百科文章建议(对于 Java,尽管如此)文档作为答案之一。

关于java - 如何用辅助方法解决脆弱的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42700541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com