>  기사  >  Java  >  항목 옵션 반품 시 주의사항

항목 옵션 반품 시 주의사항

DDD
DDD원래의
2024-09-19 06:19:02611검색

Item  Seja criterioso ao retornar opcionais

Java 8 이전 접근 방식:

  • 예외 발생: 예외적인 상황을 위해 예약되어 있으며 스택 추적 캡처로 인해 비용이 많이 듭니다.
  • Null 반환: NullPointerException과 같은 오류가 발생할 수 있는 Null 반환 가능성을 처리하려면 특수 코드가 필요합니다.

Java 8 접근 방식:

  • 값을 포함하거나 비어 있을 수 있는 불변 컨테이너인 Optional 클래스를 소개합니다.
  • null 사용을 방지하고 예외 발생 없이 누락된 값 처리를 단순화합니다.
  • 메소드는 값이 없음을 나타내기 위해 Optional을 반환할 수 있습니다.

옵션 사용의 장점:

  • 예외와 null 문제를 방지합니다.
  • 클라이언트가 값이 누락된 경우 수행할 작업을 결정할 수 있습니다(기본값 제공, 예외 발생 등).
  • 명시적인 null 처리가 필요 없이 코드를 더 쉽게 만듭니다.

Optional 클래스의 유용한 메소드:

  • Optional.of(value): null이 아닌 값으로 Optional을 생성합니다.
  • Optional.ofNullable(value): Optional을 생성하지만 null 값을 허용합니다.
  • orElse(value): Optional이 비어 있으면 기본값을 반환합니다.
  • orElseThrow(): 값이 없으면 예외가 발생합니다.
  • map(), flatMap(), filter(): Optional 내에서 값을 조작할 수 있습니다.

선택 사항에 컬렉션을 포함하지 마세요:

  • 목록이나 배열과 같은 컨테이너 유형의 경우 Optional> 대신 빈 컬렉션을 반환하세요.

성능 고려 사항:

  • Optional을 사용하면 객체 할당 측면에서 비용이 발생합니다.
  • 기본 유형의 경우 마샬링 비용을 피하기 위해 OptionalInt, OptionalLong 및 OptionalDouble을 사용하세요.

다른 Optional 사용 시 주의:
맵 키나 값 또는 컬렉션으로 사용하지 마세요.
선택적 getter처럼 의미가 없는 한 인스턴스 필드로 사용하지 마세요.

코드 예시
예시 1: Optional
의 기본 사용

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

예 2: 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);
    }
}

예 3: 기본 유형의 선택사항

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

위 내용은 항목 옵션 반품 시 주의사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:단일 숫자 I다음 기사:단일 숫자 I