Rumah  >  Artikel  >  Java  >  Item Berhati-hati apabila memulangkan pilihan

Item Berhati-hati apabila memulangkan pilihan

DDD
DDDasal
2024-09-19 06:19:02611semak imbas

Item  Seja criterioso ao retornar opcionais

Pendekatan Pra-Java 8:

  • Pengecualian lontaran: dikhaskan untuk situasi luar biasa dan mahal kerana tangkapan surih tindanan.
  • Return null: memerlukan kod khas untuk menangani kemungkinan mengembalikan null, yang boleh menyebabkan ralat seperti NullPointerException.

Pendekatan Java 8:

  • Pengenalan kelas Pilihan, bekas tidak berubah yang boleh mengandungi nilai atau kosong.
  • Mengelakkan penggunaan null dan memudahkan pengendalian nilai yang hilang tanpa membuang pengecualian.
  • Kaedah boleh mengembalikan Pilihan untuk mewakili ketiadaan nilai.

Kelebihan menggunakan Pilihan:

  • Mengelakkan pengecualian dan masalah dengan null.
  • Membenarkan pelanggan memutuskan perkara yang perlu dilakukan apabila nilai itu tiada (berikan nilai lalai, pengecualian lontaran, dsb.).
  • Menjadikan kod lebih mudah tanpa memerlukan pengendalian null yang jelas.

Kaedah berguna kelas Pilihan:

  • Optional.of(value): mencipta Pilihan dengan nilai bukan nol.
  • Optional.ofNullable(value): mencipta Pilihan, tetapi menerima nilai nol.
  • orElse(value): mengembalikan nilai lalai jika Pilihan kosong.
  • orElseThrow(): membuang pengecualian jika nilai tidak ada.
  • map(), flatMap(), filter(): benarkan manipulasi nilai dalam Pilihan.

Elakkan melibatkan koleksi dalam Pilihan:

  • Untuk jenis bekas seperti senarai atau tatasusunan, kembalikan koleksi kosong dan bukannya Pilihan>.

Pertimbangan prestasi:

  • Menggunakan Pilihan mempunyai kos dari segi peruntukan objek.
  • Untuk jenis primitif, gunakan OptionalInt, OptionalLong dan OptionalDouble untuk mengelakkan kos marshaling.

Berhati-hati dengan kegunaan lain Pilihan:
Elakkan menggunakannya sebagai kunci atau nilai Peta atau dalam koleksi.
Elakkan menggunakannya sebagai medan contoh melainkan ia masuk akal, seperti dalam getter pilihan.

Contoh Kod
Contoh 1: Penggunaan asas Pilihan

import java.util.Optional;

public class ExemploOptional {
    public static Optional<String> encontrarNome(String[] nomes, String nomeBuscado) {
        for (String nome : nomes) {
            if (nome.equalsIgnoreCase(nomeBuscado)) {
                return Optional.of(nome);
            }
        }
        return Optional.empty();  // Retorna Optional vazio se não encontrar o nome
    }

    public static void main(String[] args) {
        String[] nomes = {"João", "Maria", "Ana"};
        Optional<String> nomeEncontrado = encontrarNome(nomes, "Maria");

        nomeEncontrado.ifPresent(nome -> System.out.println("Nome encontrado: " + nome));
        System.out.println(nomeEncontrado.orElse("Nome não encontrado"));
    }
}

Contoh 2: Menggunakan orElseThrow

import java.util.Optional;

public class ExemploOrElseThrow {
    public static Optional<Integer> buscarIdade(String nome) {
        if (nome.equals("João")) {
            return Optional.of(30);
        }
        return Optional.empty();  // Retorna Optional vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        Optional<Integer> idade = buscarIdade("Maria");

        // Lança uma exceção se o valor não estiver presente
        int valorIdade = idade.orElseThrow(() -> new IllegalArgumentException("Idade não encontrada!"));
        System.out.println("Idade: " + valorIdade);
    }
}

Contoh 3: Pilihan dengan jenis primitif

import java.util.OptionalInt;

public class ExemploOptionalInt {
    public static OptionalInt buscarIdade(String nome) {
        if (nome.equals("João")) {
            return OptionalInt.of(30);
        }
        return OptionalInt.empty();  // Retorna OptionalInt vazio se o nome não for "João"
    }

    public static void main(String[] args) {
        OptionalInt idade = buscarIdade("João");

        if (idade.isPresent()) {
            System.out.println("Idade encontrada: " + idade.getAsInt());
        } else {
            System.out.println("Idade não encontrada");
        }
    }
}

Atas ialah kandungan terperinci Item Berhati-hati apabila memulangkan pilihan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Nombor Tunggal IArtikel seterusnya:Nombor Tunggal I