Saya sudah banyak menggunakan cuplikan ini, mencari null
nilai dan string kosong.
Saya menggunakan "uji argumen" -templat sebagai kode pertama dalam metode saya untuk memeriksa argumen yang diterima.
testNullArgument
if (${varName} == null) {
throw new NullPointerException(
"Illegal argument. The argument cannot be null: ${varName}");
}
Anda mungkin ingin mengubah pesan pengecualian agar sesuai dengan standar perusahaan atau proyek Anda. Namun, saya merekomendasikan memiliki beberapa pesan yang menyertakan nama argumen yang menyinggung. Kalau tidak, penelepon metode Anda harus melihat dalam kode untuk memahami apa yang salah. (SEBUAHNullPointerException
tanpa pesan menghasilkan pengecualian dengan pesan "null" yang tidak masuk akal).
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}");
}
Anda juga dapat menggunakan kembali templat pemeriksaan nol dari atas dan menerapkan cuplikan ini hanya untuk memeriksa string kosong. Anda kemudian akan menggunakan kedua templat untuk menghasilkan kode di atas.
Template di atas, bagaimanapun, memiliki masalah bahwa jika argumen in adalah final Anda harus mengubah kode yang dihasilkan beberapa (the ${varName} = ${varName}.trim()
akan gagal).
Jika Anda menggunakan banyak argumen terakhir dan ingin memeriksa string kosong tetapi tidak harus memotongnya sebagai bagian dari kode Anda, Anda bisa menggunakan ini:
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
Saya juga membuat beberapa cuplikan untuk memeriksa variabel yang tidak dikirim sebagai argumen (perbedaan besar adalah tipe pengecualian, sekarang menjadi IllegalStateException
gantinya).
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}");
}
testArgument
Ini adalah template umum untuk menguji suatu variabel. Butuh beberapa tahun untuk benar-benar belajar menghargai yang ini, sekarang saya sering menggunakannya (dalam kombinasi dengan template di atas tentu saja!)
if (!(${varName} ${testExpression})) {
throw new IllegalArgumentException(
"Illegal argument. The argument ${varName} (" + ${varName} + ") " +
"did not pass the test: ${varName} ${testExpression}");
}
Anda memasukkan nama variabel atau kondisi yang mengembalikan nilai, diikuti oleh operan ("==", "<", ">" dll) dan nilai atau variabel lain dan jika tes gagal, kode yang dihasilkan akan melempar IllegalArgumentException.
Alasan klausa if sedikit rumit, dengan seluruh ekspresi dibungkus dengan "! ()" Adalah untuk memungkinkan untuk menggunakan kembali kondisi pengujian dalam pesan pengecualian.
Mungkin akan membingungkan kolega, tetapi hanya jika mereka harus melihat kode, yang mungkin tidak harus mereka lakukan jika Anda melemparkan pengecualian semacam ini ...
Berikut ini contoh dengan array:
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");
}
}
Anda mendapatkan hasil ini dengan memanggil templat, mengetik "from.length" [TAB] "== to.length".
Hasilnya jauh lebih lucu daripada "ArrayIndexOutOfBoundsException" atau serupa dan mungkin benar-benar memberi pengguna Anda kesempatan untuk mencari tahu masalahnya.
Nikmati!