Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该选择什么方法来代替乘法重载?_Java_Oop - Fatal编程技术网

Java 我应该选择什么方法来代替乘法重载?

Java 我应该选择什么方法来代替乘法重载?,java,oop,Java,Oop,我在一些非最终类中使用了公共方法1(…),它在我们的项目中广泛使用 但我需要在这个类的内部最后一个私有方法中添加一些if条件,并且不要破坏以前实现的其他业务逻辑:(我们得到了嵌套方法) 我是否应该重载所有方法,以便通过参数列表引入一些布尔标志,以便在某些情况下切换到我的特殊条件,或者我可以在类中创建一个私有字段,并将其放入我的私有metod4(…){…}?在最后一种方式中,我会得到臭味代码吗 非常感谢。我不知道您的项目架构是什么,以及可以接受多少重构,但我的第一个想法是设计模式,因为当您的对象改

我在一些非最终类中使用了公共方法1(…),它在我们的项目中广泛使用

但我需要在这个类的内部最后一个私有方法中添加一些if条件,并且不要破坏以前实现的其他业务逻辑:(我们得到了嵌套方法)

我是否应该重载所有方法,以便通过参数列表引入一些布尔标志,以便在某些情况下切换到我的特殊条件,或者我可以在类中创建一个私有字段,并将其放入我的
私有metod4(…){…}
?在最后一种方式中,我会得到臭味代码吗


非常感谢。

我不知道您的项目架构是什么,以及可以接受多少重构,但我的第一个想法是设计模式,因为当您的对象改变其行为和内部状态时,它是一个很好的选择。对象将显示为更改其类

但是这里的实际上更多的是关于封装的。由于所有方法(M2、M3、M4)都是私有的,因此不需要担心

不破坏以前实现的其他业务逻辑:(我们得到了嵌套方法)

只是因为他们没有接触到其他人。因此,作为底线——如果影响公众利益,这些变化最有可能是适当的。请注意,这里的链接对于保存最终结果的处理至关重要。方法4的行为应该明显改变。因此,如果您建议的话,重载私有方法是一个很好的选择

课堂上的私人领域

在调用树中计算,而不是以参数形式传递

也许如果你发布更多的信息或代码,答案会更有帮助

  • 干杯

有许多连接的静态方法(传递多个参数)对于维护来说不是最佳的

  • 第一个简单的方法是为参数列表引入一个类(每个参数都成为一个字段)。然后可以在不更改方法的情况下扩展参数类

  • >P>最好考虑静态方法是否可以成为正常方法,该类部分是状态完整的。< /P>
    public class C {
    
        protected final A a;
        protected final B b;
        protected X x;
    
        public C(A a, B b) { }
    
        public void setX(X x) { }
    
        public void method1() {
            method2();
        }
    ...
    
    或者把它们结合起来


    一个方法使用相同的参数连续调用另一个方法,看起来需要面向对象的重写。

    如果你的类不是final,那么你可以创建一个子类并重写最后一个方法。我不能这样做,因为method1是静态的
    public class C {
    
        protected final A a;
        protected final B b;
        protected X x;
    
        public C(A a, B b) { }
    
        public void setX(X x) { }
    
        public void method1() {
            method2();
        }
    ...