gpt4 book ai didi

java - 带开关的循环与不同的循环

转载 作者:行者123 更新时间:2023-12-02 08:21:10 26 4
gpt4 key购买 nike

我有一个循环用户元素的方法,并根据某些给定的约束设置 boolean 值:

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
}
}
}

我想知道这个解决方案是否可行。也许我可以更好地编写不同的方法,例如:

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);
}
}

//编辑:我添加了第三种情况。

最佳答案

在我看来,通过将约束设置为真正的枚举,您可以更有效地做到这一点:

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);
}

然后你可以拥有:

public void checkUsers(Constraint constraint) {
for(int i=0; i<nodeUsers().size(); i++) {
UserElement elem = nodeUsers().getUsersElementAt(i);
constraint.apply(elem);
}
}

或者,拥有一个具有相同“apply”方法的接口(interface),并将该接口(interface)的实例传递到您的 checkUsers 方法中。这是相同的基本模式 - 将所有用户元素的迭代与“如何处理元素”分开。

关于java - 带开关的循环与不同的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786341/

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