【发布时间】:2012-07-11 14:31:14
【问题描述】:
我相信我对避免代码重复这一老生常谈的问题提出了稍微不同的看法。设置是相当标准的——一堆 if 语句采取类似的行动。下面是一个简短的示例。
我正在尝试找出解决此类情况的最佳方法,包括代码效率、紧凑性和程序员的易用性。请注意,解决这些问题的单独解决方案很好,确实更可取,因为我怀疑一个解决方案会满足所有三个问题。
例如,想到的一种可能的解决方案似乎笨拙而缓慢,尤其是在像 android 这样的移动设备上,而且它只有在变量是实例变量时才有效,而不仅仅是本地变量(这可能非常情况就是这样)。这个想法涉及一个 for 语句,其初始化表达式将使用双括号初始化来用与所涉及的变量相对应的字符串填充哈希映射(例如,“installText”映射到“installPermission”),然后 for 循环将包含一个 if- -else-if--else-if 子句,它将使用反射通过存储在 hashmap 中的变量名称来访问变量。
我怎样才能做得更好?提前感谢您的时间和建议!
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;
}
【问题讨论】:
-
也许您可以使用
Map<String, State>?似乎您的所有 if 语句都可以替换为fooPermission = map.get(fooText)。 -
我真的很好奇为什么你的变量是基于字符串的。你能解释一下你在这种情况下到底在做什么吗?我们或许可以通过更多信息提出更好的解决方案。
标签: java android loops reflection