在方法中调用方法

时间:2021-05-02 13:43:30

标签: java

我必须实现一个名为 createFromCelsius 的方法(工厂方法),我可以在其中创建具有特定温度单位(摄氏度、开尔文...)的新对象。我还创建了将代码从一个单元转换为另一个单元的方法。问题是我不知道如何将隐蔽方法连接到 createFromCelsius 方法。我试图让我所有的方法和变量 abstact 以便我可以调用它们。问题:如何在 create-methods 中实现 convert-methods?

这是我的代码:

public class Temperatur {

    private final float temp;

    /**
     * Static variable for kelvin
     */
    public static final float KELVIN_OFFSET = 273.15f;

    private Temperatur(float temp) {
        this.temp = temp;
    }

      private static Temperatur createfromCelsius(final float temp) {
          return createfromCelsius(temp);
      }
  
      private static Temperatur createfromFahrenheit(final float temp) {
          return createfromFahrenheit(temp);
      }

      private static Temperatur createfromKelvin(final float temp) {
        return createfromKelvin(temp);
    }

    /**
     * converts celsius into kelvin
     *
     * @return
     */
    public float celsiusToKelvin() {
        return (temp + KELVIN_OFFSET);
    }

    /**
     * converts celsius into fahrenheit
     *
     * @return
     */
    public float celsiusToFahrenheit() {
        return (temp * (9f / 5f) + 32f);
    }

    /**
     * converts kelvin into celsius
     *
     * @return
     */
    public float kelvinToCelsius() {
        return (temp - KELVIN_OFFSET);
    }

    /**
     * converts kelvin into fahrenheit
     *
     * @return
     */
    public float kelvinToFahrenheit() {
        return (((temp - KELVIN_OFFSET) * (9f / 5f)) + 32f);
    }

    /**
     * converts fahrenheit into celsius
     *
     * @return
     */
    public float fahrenheitToCelsius() {
        return (((temp - 32f) * (5f / 9f)));
    }

    /**
     * converts fahrenheit into kelvin
     *
     * @return
     */
    public float fahrenheitToKelvin() {
        return ((temp + 459.67f) * (5f / 9f));
    } 
}

1 个答案:

答案 0 :(得分:1)

如前所述,abstract 不符合您的要求

工厂应该是这样工作的

private static Temperatur createfromCelsius(final float temp) {
    return new Temperatur(temp);
}

但是,您应该定义类中的临时字段应该是什么基本测量单位,而不是通过工厂参数。例如,如果你想把所有东西都转换成开尔文,那看起来像

private static Temperatur createfromCelsius(final float temp) {
    Temperatur t = new Temperatur(temp);  // or do the math directly here 
    t.temp = t.celsiusToKelvin();
    return t;
}

那么你只需要公共的 getter 方法来进行 Kelvin 的单向转换