我必须实现一个名为 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));
}
}
答案 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 的单向转换