Dalam projek sebenar, kami akan mempunyai banyak tempat di mana pengesahan batal tidak dilakukan, NullPointerException mungkin berlaku. .
Mari kita lihat dahulu beberapa kaedah penghakiman nol dalam projek sebenar
if (ObjectUtil.isNotNull(vo.getSubmitterId())) { userIds.add(vo.getSubmitterId()); } if (StringUtils.isNotBlank(vo.getBudgetPM())) { userIds.add(Long.valueOf(vo.getBudgetPM())); } if (CollUtil.isNotEmpty(vo.getOriginatorList())) { userIds.addAl1(vo.getOriginatorList().stream(); }
Biasanya kami menilai sama ada objek adalah Null, anda boleh menggunakan Objects dalam java.util .nonNull(obj), ObjectUtil in hutool or directly null != obj
Item khas seperti List mungkin bukan sahaja menilai bukan null dalam projek Kosong. Untuk Senarai, ia tidak sama dengan nol dan List.size() tidak sama dengan 0. Mereka adalah dua perkara yang berbeza dalam syarikat sering mengelirukan kedua-dua ini dimulakan dan terdapat sekeping memori timbunan yang dimiliki oleh tapak, dan saiz 0 bermakna tiada apa-apa yang telah dimasukkan ke dalamnya Sebagai contoh, jika ia tidak sama dengan null, ini bermakna saya kini mempunyai sebotol Jika saiz lebih besar daripada 0, bermakna saya telah mengisi botol dengan air.
Dalam projek sebenar, ia juga didapati bahawa list.isEmpty() digunakan untuk menilai secara langsung. air dalam botol (dengan syarat botol sudah wujud, Jika botol tidak wujud, NullPointerException akan dibuang).
Jadi biasanya senarai != null && list.size > 0 digunakan untuk menilai, atau secara langsung menggunakan isEmpty alat CollUtil dalam HuTool. Terdapat juga Set, Peta, dsb.
3 Penghakiman kosong bagi String
Terdapat beberapa cara untuk mengesan rentetan kosong:
1 Salah satu kaedah yang digunakan oleh kebanyakan orang, intuitif dan mudah, tetapi tidak cekap :
if(a == null || a.equals(""));
2. Bandingkan panjang rentetan, cekap:
if(a == null || a.length() == 0);
3 kecekapan adalah serupa dengan kaedah dua:
if(a == null || a.isEmpty());
Sudah tentu, anda juga boleh menggunakan alat org.apache.commons.lang.StringUtils.
* StringUtils.isNotBlank(null) = false
* StringUtils.isNotBlank("") = false
* StringUtils.isNotBlank(" ") = false
* StringUtils.isNotBlank("bob") = true
* StringUtils.isNotBlank(" bob ") = benar
Terdapat juga kaedah isNotEmpty() dalam kelas alat ini Perbezaan antara keduanya boleh dilihat dengan jelas daripada ulasan
StringUtils.isNotEmpty(a);* StringUtils.isNotEmpty(null) = false
* StringUtils.isNotEmpty("") = false
* StringUtils.isNotEmpty(" ") = true
* StringUtils.isNotEmpty("bob") = benar
* StringUtils.isNotEmpty(" bob ") = true
4 digunakan Cegah NullpointException. Kaedah biasa ialah:
.empty(): Buat contoh Pilihan kosong
.of(T t): Buat Contoh Pilihan, pengecualian akan dilaporkan jika ia adalah batal
.ofNullable(T t): Jika t bukan null, buat contoh Pilihan, jika tidak buat contoh kosong
isPresent(): Tentukan sama ada terdapat nilai dalam bekas
ifPresent(Consume lambda): Jika bekas itu tidak kosong, laksanakan ungkapan Lambda dalam kurungan
orElse(T t): Dapatkan elemen dalam bekas Jika bekas kosong, kembalikan nilai lalai dalam kurungan
public boolean isEmpty() { return size == 0; }Apabila menggunakan Pilihan, ia boleh dilakukan dalam satu baris, sangat elegan.
boolean blind = false; if (null != baseInfo.getBlind()){ blind = baseInfo.getBlind(); }4.1 Penciptaan Objek Pilihan
boolean blind = Optional.ofNullable(baseInfo.getBlind()).orElse( other: false);4.2 Senario PenggunaanSenario 1: Tanya objek dalam lapisan perkhidmatan, dan selepas mengembalikannya, tentukan sama ada ia kosong dan proseskannya
public final class Optional<T> { private static final Optional<?> EMPTY = new Optional<>(); private final T value; //可以看到两个构造方格都是private 私有的 //说明 没办法在外面new出来Optional对象 private Optional() { this.value = null; } private Optional(T value) { this.value = Objects.requireNonNull(value); } //这个静态方法大致 是创建出一个包装值为空的一个对象因为没有任何参数赋值 public static<T> Optional<T> empty() { @SuppressWarnings("unchecked") Optional<T> t = (Optional<T>) EMPTY; return t; } //这个静态方法大致 是创建出一个包装值非空的一个对象 因为做了赋值 public static <T> Optional<T> of(T value) { return new Optional<>(value); } //这个静态方法大致是 如果参数value为空,则创建空对象,如果不为空,则创建有参对象 public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); } }
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); Optional.ofNullable(task).orElseThrow(() -> new ProcessException(ErrorCodeEnum,SYSIEM ERROR));
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penghakiman kosong di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!