[英]How to validate optional parameters in Java
我有一個方法可以接受10個參數,其中8個是強制性的。 為了檢查8/10是否不具有空值,我為每個參數設置了一堆if-else語句。
編寫此if-else代碼對我來說似乎很微不足道。 有更好的方法嗎?
謝謝卑詩省
您可以使用類來封裝參數。 這樣,在您的類中,您可以使用一種方法來檢查它們的有效性。
就像是:
class MethodParams {
private String p01;
private String p02;
private String p03;
private String p04;
private String p05;
private String p06;
private String p07;
private String p08;
private String p09;
private String p10;
// getter & setters
public boolean validate() {
// validate parameters here
}
}
class A {
public methodWith10(MethodParams mp) {
if (!mp.validate()) {
// do something and fail
}
// methodWith10 implementation follows...
}
}
您可以使用apache commons-lang庫來驗證您的輸入參數:
Validate.notNull(param, "This param can not be null"); // the message is optional
Guava的Preconditions.checkNotNull方法對此很有用。
如果嵌套的if..else語句困擾您,則可以一次檢查一個參數,並在第一個失敗后立即返回。
因此,如下所示:
if (firstParm == null) {
err = "firstParam is required.";
return false;
}
if (secondParam == null {
err = "secondParam is required.";
return false;
}
// If we made it this far, we have all the required parameter values
您當然會注意到此方法的缺點,即調用者在傳入有效的第一個參數之前不會知道第二個參數是必需的。 但是,這種類型的實現很常見。
為了改善這一點,您可以像下面這樣:
err = "";
boolean ok = true;
if (firstParm == null) {
err = "firstParam is required.";
ok = false;
}
if (secondParam == null {
err = err + " secondParam is required.";
ok = false;
}
if (! ok) {
return false;
}
// If we made it this far, we have all the required parameter values
這對您有用嗎? 而不是“為每個參數使用一堆if-else語句”,每個參數都有一個三元操作:
public static void foo(String a, String b, String c, String d, String e, String f, String g, String h, String i, String j) {
int validCount = 0;
validCount += (a != null) ? 1 : 0;
validCount += (b != null) ? 1 : 0;
validCount += (c != null) ? 1 : 0;
validCount += (d != null) ? 1 : 0;
validCount += (e != null) ? 1 : 0;
validCount += (f != null) ? 1 : 0;
validCount += (g != null) ? 1 : 0;
validCount += (h != null) ? 1 : 0;
validCount += (i != null) ? 1 : 0;
validCount += (j != null) ? 1 : 0;
if(validCount < 8)
System.out.println("Invalid");
else
System.out.println("Valid");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.