Tôi đã sử dụng rất nhiều đoạn trích này, tìm kiếm các null
giá trị và chuỗi trống.
Tôi sử dụng "kiểm tra đối số" -tem mẫu làm mã đầu tiên trong các phương thức của mình để kiểm tra các đối số nhận được.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Bạn có thể muốn thay đổi thông báo ngoại lệ để phù hợp với tiêu chuẩn của công ty hoặc dự án của bạn. Tuy nhiên, tôi khuyên bạn nên có một số thông báo bao gồm tên của đối số vi phạm. Nếu không, người gọi phương thức của bạn sẽ phải xem mã để hiểu những gì đã sai. (MộtNullPointerException
không có tin nhắn tạo ra một ngoại lệ với thông điệp khá vô nghĩa "null").
testNullOrEmptyStringArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
Bạn cũng có thể sử dụng lại mẫu kiểm tra null từ phía trên và triển khai đoạn mã này để chỉ kiểm tra các chuỗi trống. Sau đó, bạn sẽ sử dụng hai mẫu đó để tạo mã ở trên.
Tuy nhiên, mẫu ở trên có một vấn đề là nếu đối số là cuối cùng, bạn sẽ phải sửa đổi một số mã được sản xuất ( ${varName} = ${varName}.trim()
sẽ thất bại).
Nếu bạn sử dụng nhiều đối số cuối cùng và muốn kiểm tra các chuỗi trống nhưng không phải cắt chúng thành một phần của mã, bạn có thể đi với điều này thay thế:
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
if (${varName}.trim().isEmpty()) {
throw new IllegalArgumentException(
"Illegal argument. The argument cannot be an empty string: ${varName}");
}
testNullFieldState
Tôi cũng đã tạo một số đoạn mã để kiểm tra các biến không được gửi dưới dạng đối số (sự khác biệt lớn là loại ngoại lệ, bây giờ là một IllegalStateException
thay thế).
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
testNullOrEmptyStringFieldState
if (${varName} == null) {
throw new IllegalStateException(
"Illegal state. The variable or class field cannot be null: ${varName}");
}
${varName} = ${varName}.trim();
if (${varName}.isEmpty()) {
throw new IllegalStateException(
"Illegal state. The variable or class field " +
"cannot be an empty string: ${varName}");
}
kiểm tra
Đây là một mẫu chung để kiểm tra một biến. Tôi đã mất vài năm để thực sự học cách đánh giá cao cái này, bây giờ tôi sử dụng nó rất nhiều (kết hợp với các mẫu trên tất nhiên!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Bạn nhập tên biến hoặc điều kiện trả về giá trị, theo sau là toán hạng ("==", "<", ">" v.v.) và một giá trị hoặc biến khác và nếu kiểm tra thất bại, mã kết quả sẽ ném IllegalArgumentException.
Lý do cho mệnh đề if hơi phức tạp, với toàn bộ biểu thức được gói trong "! ()" Là để có thể sử dụng lại điều kiện kiểm tra trong thông báo ngoại lệ.
Có lẽ nó sẽ gây nhầm lẫn cho một đồng nghiệp, nhưng chỉ khi họ phải xem mã, điều mà họ có thể không phải làm nếu bạn ném những loại ngoại lệ này ...
Dưới đây là một ví dụ với mảng:
public void copy(String[] from, String[] to) {
if (!(from.length == to.length)) {
throw new IllegalArgumentException(
"Illegal argument. The argument from.length (" +
from.length + ") " +
"did not pass the test: from.length == to.length");
}
}
Bạn nhận được kết quả này bằng cách gọi lên mẫu, gõ "from.length" [TAB] "== to.length".
Kết quả là thú vị hơn một "ArrayIndexOutOfBoundException" hoặc tương tự và thực sự có thể cung cấp cho người dùng của bạn một cơ hội để tìm ra vấn đề.
Thưởng thức!