我对编程有些新鲜感。我需要编写一个if条件来检查这25个方法,如果所有方法都返回true,那么只有控件进入if块。
所以我试着
if(meth1()&&meth2()&&meth3()&&meth4() ....... meth25()){
..... .....
}
else {
print("in else");
}
boolean meth1(){
if (valid){
return true;
}
else return false;
}
boolean meth2(){
if (valid){
return true;
}
else return false;
}
...
...
...
boolean meth25(){
if (valid){
return true;
}
else return false;
}还有别的办法吗?
编辑:我在这里张贴我的实际代码……
if(v.isValidRecordType(recordType)&& v.isValidClientReferance(clientReferance)&& v.isValidInitials(initials) && v.isValidPrefixes(prefixes)&& v.isValidLastname(lastname)&& v.isValidGender(gender)&& v.isValidDateOfBirth(dateOfBirth)
&& v.isValidStreetName(streetName)&& v.isValidHouseNumber(houseNumber)&& v.isValidHNExtension(hnExtension)&& v.isValidPostalCode(postalCode)&& v.isValidTownName(townName)&& v.isValidTelephone1(telephone1)&& v.isValidTelephone2(telephone2)&& v.isValidEmail(email)
&& v.isValidPrincipalDebit(principalDebit)&& v.isValidCollectionFee(collectionFee)&& v.isValidAdditionalFees(additionalFees)&& v.isValidTotalDebit(totalDebit)&& v.isValidDateOfInvoice(dateOfInvoice)&& v.isValidActivationDateCollectionFile(activationDateCollectionFile)
&& v.isValidBranch(branch)&& v.isValidKnownOnAddress(knownOnAddress)&& v.isValidFilters(filters))
{
System.out.println("processed");
continue;
}
else{
System.out.println("in the record having clientReferance :"+clientReferance +"\n");
}和isValid*方法看起来像..。
public boolean isValidClientReferance(String ClientReferance){
String pattern= "^[a-zA-Z0-9]*";
if(ClientReferance.matches(pattern) && mandatory(ClientReferance) ){
return true;
}
System.out.println("Invalid ClientReferance");
return false;
}发布于 2014-02-19 05:55:58
有25个条件本身就是个坏兆头。他们已经有了一个分组的建议,我会去做的。如果你做不到,那就写点什么
void allmightyCondition(....) {
if (!method1()) return false;
if (!method2()) return false;
...
if (!method25()) return false;
return true;
}这使得它更易读。它还为注释留出了一些位置,并允许更容易地重新排序(这对于速度来说可能是有用的)。
缺少函数指针的Java是一件相当好的事情(我认为它们不值得)。如果您真的需要一个循环,您可以创建25个Predicate实现并使用它们。没有JDK8,它就有点冗长。无论如何,这在你的例子中是没有意义的,只有当你真正需要它的时候才使用它。
发布于 2014-02-19 05:26:24
也许不是直接相关的,但也许你可以把25分成几个组呢?
group1(){
return method1() && method2...... method7();
}
..
...
..
if (group1() && group2() && group3()){
}else{
}这将使代码更容易阅读(只要您很好地命名group)。这当然是如果方法符合这种风格,不要强迫它。
要从另一个答案中盗取一个例子,这可以是一个组示例。
IsUserValid(){
return IsNameValid() && IsAddressValid() && IsPhoneNumberValid().....
}发布于 2014-02-19 05:19:10
如果我必须在C中这样做,我可能会使用指向函数的指针数组,并在一个循环中对它们进行评估:
typedef bool (*func)();
func f[] = {meth1, meth2, meth3, /* ... */, meth25};
bool all_good = true;
for i=0; i<25 && all_good; i++)
all_good &= f[i]();
if (all_good)
// ...
else
// ...根据编辑的问题,可能值得考虑另一种可能性。与其将其构造为if,不如从每个字符串构造一个对象,如果该字符串不符合其要求,则使用该构造函数抛出。然后你就会得到这样的结果:
try {
ClientReference ref = new ClientReference(clientReference);
Initial i = new Initial(initials);
// and so on for 23 more...
}
catch(bad_input) {
System.out.println("in the record having clientReferance :"+clientReferance +"\n");
}显然,每个构造函数都会调用(或包含)代码来验证有效性,如果输入不符合该类型的要求,则抛出异常。
顺便提一下:reference不包含a。
https://stackoverflow.com/questions/21871639
复制相似问题