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

Item Berhati-hati apabila memulangkan pilihan

DDD
Lepaskan: 2024-09-19 06:19:02
asal
725 orang telah melayarinya

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"));
    }
}

Salin selepas log masuk

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);
    }
}

Salin selepas log masuk

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");
        }
    }
}

Salin selepas log masuk

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

Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan