我有一个循环用户元素的方法,并根据一些给定的约束设置一个布尔值:
public void checkUsers( int constraint ) {
for(int i=0; i<nodeUsers().size(); i++) {
UserElement elem = nodeUsers().getUsersElementAt(i);
switch (constraint) {
case CHECK_ALL:
elem.setChecked(true); break;
case CHECK_NONE:
elem.setChecked(false); break;
case CHECK_NO_LANG:
if (elem.getLanguage() == null)
elem.setChecked(true);
else
elem.setChecked(false);
break;
// More cases
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道这个解决方案是否合适.也许我可以更好地编写不同的方法,如:
public void checkAllUsers() {
for(int i=0; i<nodeUsers().size(); i++) {
UserElement elem = nodeUsers().getUsersElementAt(i);
elem.setChecked(true);
}
}
public void checkNoUsers() {
for(int i=0; i<nodeUsers().size(); i++) {
UserElement elem = nodeUsers().getUsersElementAt(i);
elem.setChecked(false);
}
}
Run Code Online (Sandbox Code Playgroud)
//编辑:我添加了第三个案例.
Jon*_*eet 16
在我看来,你可以通过使你的约束成为一个真正的枚举来更有效地做到这一点:
public enum Constraint
{
CHECK_NONE
{
@Override void apply(UserElement element)
{
element.setChecked(false);
}
},
CHECK_ALL
{
@Override void apply(UserElement element)
{
element.setChecked(true);
}
};
public abstract void apply(UserElement element);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以:
public void checkUsers(Constraint constraint) {
for(int i=0; i<nodeUsers().size(); i++) {
UserElement elem = nodeUsers().getUsersElementAt(i);
constraint.apply(elem);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,使用具有相同"apply"方法的接口,并将接口的实例传入您的checkUsers方法.它是相同的基本模式 - 将所有用户元素的迭代与"如何处理元素"分开.
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |