我有驗證給定輸入引數是否為空的場景,我有資料型別字串和日期的欄位串列-productId,productName,productType,productRating,productSellDate and productReturnDate
我要檢查這些輸入PARAMS是null或empty或blank每個欄位,如果該欄位的任何一個empty或blank或null-它應該拋出NullPointerException與欄位名。
請在下面找到我的代碼 - 因為我是 Java 新手,請為編碼標準道歉。我不知道如何獲取具有empty或null何時拋出的欄位名稱NullPointerException
我正在呼叫validate,validateDate對于每個字串,是否有任何選項可以一次性驗證所有這些引數?
請建議是否有更好的方法來撰寫下面的代碼。提前感謝您的幫助!謝謝。
import java.util.Date;
public class Test {
public static void main(String[] args) {
String productId = "";
String productName = "Apple";
String productType = "Electronics";
String productRating = "Good";
Date productSellDate = new Date();
Date productReturnDate = new Date();
System.out.println(validate(productId));
System.out.println(validate(productName));
System.out.println(validate(productType));
System.out.println(validate(productRating));
System.out.println(validateDate(productSellDate));
System.out.println(validateDate(productReturnDate));
}
private static String validate(String s) {
if (s.isBlank() || s.isEmpty()) {
throw new NullPointerException("input param is empty"); // how to get the string field name which is empty or null or blank
} else {
return "valid";
}
}
private static String validateDate(Date d) {
if (d == null) {
throw new NullPointerException("sell or return date is empty"); // how to get the date field name which is empty or null or blank
} else {
return "date is valid";
}
}
}
uj5u.com熱心網友回復:
您可以像這樣撰寫它以接受任意數量的輸入并在其中任何一個為空或空白或空時拋出
private static String validate(String... strings) {
for (String s : strings) {
if (s == null || s.isBlank() || s.isEmpty()) {
throw new NullPointerException("input param is empty");
}
}
return "valid";
}
你可以用任意數量的輸入呼叫它
validate("1", "2", null, "");
uj5u.com熱心網友回復:
您可能認為它只是對您所獲得的解決方案的一個小改進。它當然不是對所有變數的一次性驗證。我的想法是在同一行中對每個進行驗證和分配。例如:
String productId = validate("", "productId");
String productName = validate("Apple", "productName");
結果:
執行緒“main”中的例外 java.lang.NullPointerException: productId
該訊息提到productId是空白/空的。
這顯然需要validate()在沒有拋出的情況下回傳已驗證的物件。
private static String validate(String s, String message) {
if (s == null || s.isBlank()) {
throw new NullPointerException(message);
} else {
return s;
}
}
我們不需要isEmpty()作為顯式條件,因為isBlank()對于完全空的字串也回傳 true。是否要檢查null,您自己最清楚。
對于非字串變數,只需使用內置的Objects.requireNonNull():
LocalDate productSellDate = Objects.requireNonNull(
LocalDate.now(ZoneId.systemDefault()), "productSellDate");
LocalDate productReturnDate = Objects.requireNonNull(
LocalDate.now(ZoneId.systemDefault()), "productReturnDate");
LocalDate是 java.time 中的一個類,我推薦用于所有日期作業的現代 Java 日期和時間 API。ALocalDate是沒有時間的日期。如果您也需要時間,請從同一 API 中找到其他一些類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/346718.html
