Java 在构造函数-NavigableMap中避免if/else?

Java 在构造函数-NavigableMap中避免if/else?,java,Java,我有以下代码,基于构造函数的输入,我需要初始化一些封装在简单POJO中的值。。如您所见,这些值是恒定的 但是,我不喜欢if/else构造,并且已经阅读了NavigableMap作为保存范围值的替代方法。。关于如何改进/清理下面的内容或使用此结构,您有何想法 谢谢 private Calibrated calibratedValues; public CalibrationProperties(long odNumber) { setCalibratedValues(odNumber);

我有以下代码,基于构造函数的输入,我需要初始化一些封装在简单POJO中的值。。如您所见,这些值是恒定的

但是,我不喜欢if/else构造,并且已经阅读了NavigableMap作为保存范围值的替代方法。。关于如何改进/清理下面的内容或使用此结构,您有何想法

谢谢

private Calibrated calibratedValues;

public CalibrationProperties(long odNumber) {
    setCalibratedValues(odNumber);
}

private void setCalibratedValues(long odNumber) {
    if (odNumber < 762) {
        this.calibratedValues = new Calibrated(K0, H0, K0_INV, H0_INV, F0);
    } else if (odNumber < 866) {
        this.calibratedValues = new Calibrated(K1, H1, K0_INV, H0_INV, F1);
    } else if (odNumber < 1011) {
        this.calibratedValues = new Calibrated(K2, H2, K2_INV, H2_INV, F2);
    } else {
        this.calibratedValues = new Calibrated(K3, H3, K3_INV, H3_INV, F3);
    }

    //Two exceptions
    if (odNumber == 858){
        this.calibratedValues = new Calibrated(K2, H2, K2_INV, H2_INV, F2);
    }
    if (odNumber == 1005){
        this.calibratedValues = new Calibrated(K3, H3, K3_INV, H3_INV, F3);
    }
}

public Calibrated getCalibratedValues() {
    return calibratedValues;
}

/** Convenience class used to hold calibrated values */
static class Calibrated {
    private double[] k;
    private double[] h;
    private double[] kinv;
    private double[] hinv;
    private double f;

    Calibrated(double[] k, double[] h, double[] kinv, double[] hinv, double f) {
        this.k = k;
        this.h = h;
        this.kinv = kinv;
        this.hinv = hinv;
        this.f = f;
    }

    public double[] getK() {
        return k;
    }

    public double[] getH() {
        return h;
    }
    ...
私人校准值;
公共校准属性(长odNumber){
设置校准值(odNumber);
}
私有无效设置校准值(长odNumber){
如果(odNumber<762){
此。校准值=新校准值(K0、H0、K0\u INV、H0\u INV、F0);
}否则如果(odNumber<866){
此。校准值=新校准值(K1、H1、K0\u INV、H0\u INV、F1);
}否则如果(odNumber<1011){
此。校准值=新校准值(K2,H2,K2_INV,H2_INV,F2);
}否则{
此。校准值=新校准值(K3,H3,K3_INV,H3_INV,F3);
}
//两个例外
如果(odNumber==858){
此。校准值=新校准值(K2,H2,K2_INV,H2_INV,F2);
}
如果(odNumber==1005){
此。校准值=新校准值(K3,H3,K3_INV,H3_INV,F3);
}
}
公共校准GetCalibredValues(){
返回校准值;
}
/**用于保存校准值的便利类*/
静态类校准{
私人双[]k;
私人双[]h;
私人双亲;
私人双[]hinv;
私人双f;
校准(双[]k,双[]h,双[]kinv,双[]hinv,双f){
这个。k=k;
这个,h=h;
this.kinv=kinv;
this.hinv=hinv;
这个。f=f;
}
公共双[]getK(){
返回k;
}
公共双[]getH(){
返回h;
}
...

这里的构造函数中没有使用if/else,而是创建了类似于工厂方法的东西

  • 如果您将在之后阅读此代码,请使用更有意义的名称 一年后你将不知道它们是什么意思——我指的是构造函数参数和类属性
  • 构造函数的参数列表太大。可以在类内部创建一些 工厂方法
例如:

public static Calibrated createSmallCaribration(){
   return new Calibrated(K0, H0, K0_INV, H0_INV, F0);
}

如果你愿意这样做,你甚至可以让你的构造函数包可见。而且你会知道每个构造函数配置是什么,

你应该给常量一些有意义的名称。这个问题似乎是离题的,因为它是关于代码检查的。请改为尝试。你想让这些值被分配一些标准和定义你不想要if..else条件???或者你不想要任何条件结构??我不完全理解你的问题。但是如果你只是不想使用if/else,那么你可以使用Switch case。只有当你想要一些基于条件的结构时……这里有一个关于if..else语句的很好的讨论,基本上最好的方法之一似乎不是o成为一种策略模式..更多的是在实践中对干净代码原则的代码审查和讨论:)但oyr可以从上面提到的一些更改开始:)