gpt4 book ai didi

java - 从 Java 构造函数内部调用私有(private)方法

转载 作者:行者123 更新时间:2023-12-01 19:50:05 26 4
gpt4 key购买 nike

我有以下类(class):

package com.tesco.demandforecasting.group8.choprachap7;

import java.util.ArrayList;

import com.tesco.demandforecasting.group8.utils.MathOperUtils;
import com.tesco.demandforecasting.group8.utils.RegressionUtils;

import lombok.Getter;

/**
* This class if used to find seasonality factor of each period, as explain in
* the chapter See https://kelley.iu.edu/mabert/e730/Chopra-Chap-7.pdf for the
* explanation
*/
@Getter
public class ChopraChap7SeasonalFactorsCalculator {

private double[] regressionParams;

private int sales_size;
private int periodicity;

private ArrayList<Integer> sales;
private ArrayList<Double> deseasonalisedData;
private ArrayList<Double> deseasonalisedDemandUsingRegression;
private ArrayList<Double> seasonalityFactors;

public ChopraChap7SeasonalFactorsCalculator() {

this.sales = new ArrayList<>();
this.deseasonalisedData = new ArrayList<>();
this.deseasonalisedDemandUsingRegression = new ArrayList<>();
this.seasonalityFactors = new ArrayList<>();

this.sales.add(8000);
this.sales.add(13000);
this.sales.add(23000);
this.sales.add(34000);
this.sales.add(10000);
this.sales.add(18000);
this.sales.add(23000);
this.sales.add(38000);
this.sales.add(12000);
this.sales.add(13000);
this.sales.add(32000);
this.sales.add(41000);

this.sales_size = sales.size();
this.periodicity = 4;

calculateSeasonalityFactors();
}


private void calculateSeasonalityFactors() {

.......
.......

this.seasonalityFactors = seasonalityFactors;
this.deseasonalisedDemandUsingRegression = deseasonalisedDemandUsingRegression;
this.deseasonalisedData = deseasonalisedData;

}

}

我想使用各自的 getter 将类字段公开给外部类。但是,问题在于,只有在调用 ChopraChap7SeasonalFactorsCalculator() 方法之后,这些字段才会获得任何值。因此,我在这里所做的就是在创建类的对象后立即调用该方法。当然,这可行,但是这是好的设计模式吗?

假设我不会从构造函数中调用该方法。因此,如果我们有以下代码是其他类:

ChopraChap7SeasonalFactorsCalculator calc = new ChopraChap7SeasonalFactorsCalculator();
calc.getDeseasonalisedData();

这将返回任何空数组列表。如何确保在访问任何字段之前调用该方法?

对于我的情况来说,最好的设计模式是什么?

最佳答案

Of course, this will work, but is this good design pattern?

这是一个非常正确的设计。您将构造函数逻辑的一部分委托(delegate)给私有(private)方法以使事情更清晰。

This will return to me any empty array list. How do I ensure that the method is called before any field is accessed?

对于任何方法或代码块,您对某人更改构造函数中某些内容的恐惧可能都是正确的。
但应用程序的设计目的并不是要检查每个组件是否按照我们的预期运行。这是单元测试的角色,用于断言实际行为是预期的。

因此,为 ChopraChap7SeasonalFactorsCalculator 构造函数编写一个单元测试,并在此测试中断言,一旦创建对象,所有 getter 都会返回预期值。
如果有人以错误的方式修改了构造函数,测试将会失败,构建也会失败。现在你有办法确保事情按预期进行。

关于java - 从 Java 构造函数内部调用私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51614035/

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