我相信我對避免代碼重複這個常年性問題略有不同。該設置是相當標準的 - 一堆if語句採取類似的行動。下面你會找到一個簡短的例子。在if語句中繞過類似變量的重複
我試圖找出解決這種情況的最佳方法,就代碼效率,緊湊性和程序員而言。請注意,解決上述每個問題的單獨解決方案都很好,實際上更可取,因爲我懷疑一個解決方案會遇到這三個問題。
例如,想到的一種可能的解決方案似乎是不明智和緩慢的,特別是在像android這樣的移動設備上,加上它只會在變量是實例變量時才起作用,而不僅僅是局部的情況很好)。這個想法涉及到一個for語句,它的初始化表達式將使用雙括號初始化來填充與所涉及變量相對應的字符串(例如「installText」映射到「installPermission」)的hashmap,然後for循環將包含if- -else-if-else-if子句,它將使用反射通過存儲在散列映射中的名稱訪問變量。
我該如何做得更好?預先感謝您的時間和建議!
if (installText.equals("Default")) {
installPermission = DEFAULT;
} else if (installText.equals("Allow")) {
installPermission = ENABLED;
} else if (installText.equals("Disallow")) {
installPermission = DISABLED;
}
if (uninstallText.equals("Default")) {
uninstallPermission = DEFAULT;
} else if (uninstallText.equals("Allow")) {
uninstallPermission = ENABLED;
} else if (uninstallText.equals("Disallow")) {
uninstallPermission = DISABLED;
}
if (runText.equals("Default")) {
runPermission = DEFAULT;
} else if (runText.equals("Allow")) {
runPermission = ENABLED;
} else if (runText.equals("Disallow")) {
runPermission = DISABLED;
}
也許你可以使用一個'地圖<字符串,國家>':那麼你可以如下做到這一點?好像你所有的if語句都可以用'fooPermission = map.get(fooText)'來代替。 – Keppil 2012-07-11 14:58:13
我其實很好奇爲什麼你的變量是以字符串爲基礎的。你能解釋一下你在這種情況下做了什麼嗎?我們可能會提供更好的解決方案和更多的信息。 – kcoppock 2012-07-11 15:47:10