的Java 7,您可以switch
上String
秒。
但是他們說,如果有人餓了,最好是教他們如何釣魚,而不是給他們一條魚。從長遠來看。我得到的是你的代碼需要重構,是否使用switch
或enumerations或maps是第二個。
你有太多重複的代碼做基本相同的事情。我指的是:
unitValue = Double.parseDouble(tfUnit.getText());
valMeter = unitValue * defined1;
labelDesc.setText("Unit 1");
convert();
很明顯,因爲你使用乘以根據所使用的單位不同的因素,你需要評估單位對使用該因子的功能。用較少的數學術語來說,您需要的東西可以產生值爲defined1
或,具體取決於提供的字符串。您已經有unit
指的是您所在單位的「名稱」,您可以使用它。我將這個方法稱爲factor
,返回一個單位名稱並返回一個Number
(因爲它不跟隨您的示例,不管您是乘以某種整數還是實數)。我也假設你的defined1
和等,是變量或文字。
unitValue = Double.parseDouble(tfUnit.getText());
valMeter = unitValue * factor(unit);
labelDesc.setText(unit);
convert();
Number factor(String unitName)
{
switch(unitName)
{
case "Unit 1": return defined1;
case "Unit 2": return defined2;
default: throw new Exception("Unknown unit");
}
}
的方法本身就是你的「轉或不轉」的問題逐漸在你,如果你想免費使用map:
Map<String, Number> unitNameValueMap = new HashMap<String, Number>();
unitNameValueMap.put("Unit 1", defined1);
unitNameValueMap.put("Unit 2", defined2);
Number factor(String unitName)
{
Number result = unitNameValueMap.get(unitName);
if(result == null)
{
throw new Exception("Unknown unit");
}
return result;
}
或者你可以使用枚舉:
enum UnitValue
{
UNIT1(defined1), UNIT2(defined2);
final Number value;
private UnitValue(Number value)
{
this.value = value;
}
}
Number factor(String unitName)
{
return Enum.valueOf(UnitValue.class, "UNIT" + Integer.parseInt(unitName.substring(5)).value;
}
你甚至可以switch
或使用地圖內的枚舉,它會給你很好的代碼的可讀性,以及。
您需要配置您的程序,看看是否需要switch
爲基礎的解決方案或枚舉基於一個或一個基於地圖的一個。就目前的情況而言,你可以看到,基於enum
的解決方案由於單元名稱,枚舉常量和值之間的關係而有點麻煩。如果有人可以使用枚舉做得更好,那就自然而然地拿自己的代碼。
通常情況下,最短的代碼是最好的,因爲它更容易閱讀和最經常瞭解。但要小心地圖 - 它們會比其他解決方案產生更多的開銷,所以我更喜歡在地圖數量較少而且密鑰較多的地方使用它們,而不是相反。
來源
2012-10-17 18:35:03
amn
任何具體原因爲什麼你想要switch-case? –
唯一的原因是使代碼更清晰。 – AbreQueVoy
然後,如下面的dystroy所述,將所有常用代碼移動到if(source == comboUnit)條件的主位,並在if語句中使用'valmeter ='行('labelDesc.setText(unit );'將在通用代碼中工作) – mcalex