好的,我有一批方法返回boolean
true/false
个值。
private void saveChangesOnEditButtonActionPerformed(java.awt.event.ActionEvent evt) {
updateMainTabsAccess();
updateUserPaymentTabPermissions();
updateUserRegistrationTabPermissions();
updateUserStudentsTabPermissions();
updateUserFacultyTabPermissions();
updateUserHomePermissions(); //saves any update made on existing user settings/permissions
updateUserInformation(); // sasve any update made on existing user information such as username
}
我想知道我是否有可能检查每种方法'通过for-each循环返回值。
我正在考虑创建一个private boolean isUpdateSuccessful()
方法。
比如说,
private boolean isUpdateSuccessful(){
Boolean a = updateMainTabsAccess();
Boolean b = updateUserPaymentTabPermissions();
//........so on....
Boolean result = (a && b &&...)
return result;
}
问题是,我不知道是否可以将它们放入arraylist或组件数组中,如
ArrayList<Boolean> listOfMethods = new ArrayList<Boolean>(method1,method2..);
然后我可以通过for-each
循环检查每个
for(Boolean b:listOfMethods){
Boolean successful=true;
successful = (successful && b)
}
我的问题是:
1.。)如何提取这些方法的返回值并使用方法初始化Arraylist
。
2。)使用for-each
循环,我有什么可能尝试做的事情?我没有,那么你建议我做什么?
我很感激任何答案或建议。我只是想检查每个方法是否成功。我想过使用?1:0:
提前致谢。
答案 0 :(得分:2)
如果我是你,我会这样做。只是一个示例代码:
private void saveChangesOnEditButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (updateMainTabsAccess()) {
if (updateUserPaymentTabPermissions()) {
if (updateUserRegistrationTabPermissions()) {
...
} else {
// error on update registration
}
} else {
// error on update payment
}
}
具有以上风格:
答案 1 :(得分:1)
为什么不使用Stream
来检查结果:
Stream.<Boolean>of(updateMainTabsAccess(),
updateUserPaymentTabPermissions(),
updateUserRegistrationTabPermissions(),
updateUserStudentsTabPermissions(),
updateUserFacultyTabPermissions(),
updateUserHomePermissions(),
updateUserInformation()).allMatch(b -> b);
这样你就可以摆脱短路评估,也不需要为每种方法创建方法参考。
List<Supplier<Boolean>> methods = Arrays.asList(this::updateMainTabsAccess,
this::updateUserPaymentTabPermissions,
...
);
for (Supplier<Boolean> supplier : methods) {
boolean methodResult = supplier.get();
...
}
这虽然很难被视为改善......
答案 2 :(得分:1)
这将找到你的类中的所有方法,它是在逐个自动调用方法并将响应存储到成功变量后返回布尔值
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
public class Test {
public static void main(String[] args) {
Test test = new Test();
Class c = test.getClass();
boolean successful = true;
for (Method method : c.getDeclaredMethods()) {
if (method.getReturnType().toString().equals("boolean")) {
try {
String mname = method.getName();
Object o = method.invoke(test, null);
System.out.format("%s() returned %b%n", mname, (Boolean) o);
successful = successful && (Boolean) o;
} catch (Exception e) {
e.printStackTrace();
}
}
}
System.out.println("final answer : " + successful);
}
public boolean a() {
return true;
}
public boolean b() {
return false;
}
public boolean c() {
return false;
}
}
希望对你有所帮助。
答案 3 :(得分:0)
如果你想要执行每一个方法并检查每个方法是否都可以简单地编写
boolean success = updateMainTabsAccess() &
updateUserPaymentTabPermissions() &
updateUserRegistrationTabPermissions() &
updateUserStudentsTabPermissions() &
updateUserFacultyTabPermissions() &
updateUserHomePermissions() &
updateUserInformation();
答案 4 :(得分:0)
您已收到一些答案。 如果你使用java 8,那么Fabian是一个很好的。
但要直接回答你的观点
1.。)如何提取这些方法的返回值并使用方法初始化Arraylist。
ArrayList<Boolean> resultsList = new ArrayList<Boolean>();
resultsList.add(updateMainTabsAccess());
...
2。)使用for-each循环,我有什么可能尝试做的事情?我没有,那么你建议我做什么?
boolean res = true;
for (Boolean singleResult : resultsList) {
res = res && singleResult;
}
答案 5 :(得分:0)
当Java 8没有引入Lambdas时,这是实现目标的旧式方法。
public class TestMethodsListCall {
public abstract class Checker {
public abstract boolean check();
}
public static void main(String[] args) {
new TestMethodsListCall();
}
public TestMethodsListCall() {
final TestMethodsListCall that = this;
List<Checker> checkers = Arrays.asList( //
new Checker() { public boolean check() { return that.methodA(); } }, //
new Checker() { public boolean check() { return that.methodB(); } } //
// , ...
);
boolean res = true;
for (Checker c : checkers) {
res = res & c.check();
if (!res) {
// Break, display some message or all together
}
}
}
public boolean methodA() {
return true;
}
public boolean methodB() {
return false;
}
}