gpt4 book ai didi

java - 安卓(Java): DRYer approach using interfaces and less duplication

转载 作者:行者123 更新时间:2023-12-02 10:24:15 28 4
gpt4 key购买 nike

有没有使用接口(interface)的好方法来减少这里的重复。目前有 3 种转换类型(kelvincelciusfahrenheit),可产生 6 种组合。

有没有一种更可扩展的方法来处理这个问题,假设我们想再添加 2 种类型(总共 5 种),那么维护所有组合会变得有点麻烦吗?

这是代码:

public class ConvertTemperatureJava {
private static final String TAG = "ConvertTemperatureJava";

static String TEMPERATURE_KELVIN = "kelvin";
static String TEMPERATURE_CELCIUS = "celsius";
static String TEMPERATURE_FAHRENHEIT = "fahrenheit";

private float inputValue = 0;
private String inputUnit, outputUnit = null;

public void setInputValue(String inputValueString) {
// convert input to correct type
try {
this.inputValue = Float.parseFloat(inputValueString);
} catch (NumberFormatException e) {
Log.e(TAG, e.getMessage());
this.inputValue = 0;
}
}

public void setInputUnit(String inputUnit) {
this.inputUnit = inputUnit;
}

public void setOutputUnit(String outputUnit) {
this.outputUnit = outputUnit;
}

public float convert() {
// same units, no conversion required
if (inputUnit != null && outputUnit != null && inputValue != 0) {
if (inputUnit.equalsIgnoreCase(outputUnit)) {
return inputValue;
}

// kelvin and celsius
if (inputUnit.equalsIgnoreCase(TEMPERATURE_KELVIN) && outputUnit.equalsIgnoreCase(TEMPERATURE_CELCIUS)) {
return kelvinToCelsius(inputValue);
}
if (inputUnit.equalsIgnoreCase(TEMPERATURE_CELCIUS) && outputUnit.equalsIgnoreCase(TEMPERATURE_KELVIN)) {
return celsiusToKelvin(inputValue);
}

// kelvin and fahrenheit
if (inputUnit.equalsIgnoreCase(TEMPERATURE_KELVIN) && outputUnit.equalsIgnoreCase(TEMPERATURE_FAHRENHEIT)) {
return kelvinToFahrenheit(inputValue);
}
if (inputUnit.equalsIgnoreCase(TEMPERATURE_FAHRENHEIT) && outputUnit.equalsIgnoreCase(TEMPERATURE_KELVIN)) {
return fahrenheitToKelvin(inputValue);
}

// celsius and fahrenheit
if (inputUnit.equalsIgnoreCase(TEMPERATURE_CELCIUS) && outputUnit.equalsIgnoreCase(TEMPERATURE_FAHRENHEIT)) {
return celsiusToFahrenheit(inputValue);
}
if (inputUnit.equalsIgnoreCase(TEMPERATURE_FAHRENHEIT) && outputUnit.equalsIgnoreCase(TEMPERATURE_CELCIUS)) {
return fahrenheitToCelsius(inputValue);
}
}

// fallback
return 0;
}

private float kelvinToCelsius(float input) {
return input - 273.15f;
}

private float celsiusToKelvin(float input) {
return input + 273.15f;
}

private float kelvinToFahrenheit(float input) {
return (input * 1.8f) - 459.67f;
}

private float fahrenheitToKelvin(float input) {
return (input + 459.67f) * (5f / 9f);
}

private float celsiusToFahrenheit(float input) {
return (input * 1.8f) + 32f;
}

private float fahrenheitToCelsius(float input) {
return (input - 32f) / 1.8f;
}
}

最佳答案

就像联合国在语言方面所做的那样。选择一个单位作为中间单位(就像联合国的英语一样),然后根据转入/转出该标准单位来定义所有其他转换器。

例如,您可以选择开尔文作为标准单位,然后将 celsiusToFahrenheit(input) 实现为 kelvinToFahrenheit(celsiusToKelvin(input))

关于java - 安卓(Java): DRYer approach using interfaces and less duplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094769/

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