목차
null
로그인 후 복사
로그인 후 복사
" >타사 도구 클래스를 사용하지 않는 경우 <를 호출해야 한다고 가정해 보겠습니다. 🎜>
null
로그인 후 복사
로그인 후 복사
빈 객체 생성
三. 注意事项
Java java지도 시간 Java 8의 새로운 기능인 Optional 클래스

Java 8의 새로운 기능인 Optional 클래스

Feb 23, 2017 am 10:30 AM
java8 선택적 수업 새로운 특성

요약: Optional은 null 키워드를 대체하지는 않지만 null 판단을 보다 우아하게 구현합니다.

NullPointException은 Java에서 시도했지만 모든 Java 프로그래머가 경험한 예외라고 할 수 있습니다. 프로그래머를 설계 초기부터 포인터의 고통으로부터 해방시키기 위해 포인터는 실제로 존재하며, Java 디자이너는 Java 언어에서 포인터를 더 간단하고 사용하기 쉽게 만들 수 있을 뿐 완전히 없앨 수는 없으므로 아아아

우리가 매일 보는 것.


널 포인터 예외는 런타임 예외입니다. 이러한 예외 유형의 경우 명확한 처리 전략이 없으면 프로그램을 조기에 중단시키는 것이 가장 좋습니다. 그러나 많은 시나리오에서 개발자는 그렇게 하지 않습니다. 특정 처리 전략이 있지만 널 포인터 예외의 존재를 전혀 인식하지 못합니다. 예외가 발생하면 처리 전략도 매우 간단합니다. 예외가 존재하는 곳에 if 문 판단을 추가하면 됩니다. 그러나 이러한 응답 전략은 우리 프로그램에 점점 더 많은 null 판단이 나타나게 할 것입니다. 코드에서 null 키워드의 발생을 최소화해야 하며, java8에서 제공하는

null
로그인 후 복사
로그인 후 복사

클래스는 NullPointException을 줄일 뿐만 아니라 코드의 아름다움을 향상시킵니다. 하지만 먼저 이것이
Optional
로그인 후 복사
키워드를 대체하는 것이 아니라 NullPointException

을 방지하기 위해 보다 우아한 null 결정 구현을 제공한다는 점을 분명히 해야 합니다.

1. 직관적인 경험

타사 도구 클래스를 사용하지 않는 경우 <를 호출해야 한다고 가정해 보겠습니다. 🎜>
null
로그인 후 복사
로그인 후 복사

메서드:

if(null == str) { // Null 포인터 결정

return 0;
}
return str.length();
Optional 클래스를 사용하는 경우 다음과 같이 구현합니다.

return Optional.ofNullable(str).map(String::length).orElse(0);
Optional 코드가 상대적으로 간결할 때. 코드가 크면 쉽게 잊어버릴 수 있지만 Optional 클래스를 사용하면 이러한 문제를 피할 수 있습니다.



2. 기본 사용법

1. 객체 생성

빈 객체 생성

선택위의 예제 코드는

str.length()
로그인 후 복사

메소드를 호출하여 빈
empty()
로그인 후 복사

객체 유형을 생성합니다.

객체 생성: null은 허용되지 않습니다.

Optional은 null이 아닌 객체를 생성하기 위한

Optional<String>
로그인 후 복사

메소드를 제공합니다. 이 메소드에는 전달된 매개변수가 필요합니다. 비어 있을 수 없습니다. 그렇지 않으면

Optional<String> optStr = Optional.of(str); 🎜>

객체 생성: 비어 있음


전달된 매개변수에 null 값이 발생할 가능성이 있는지 확실하지 않은 경우 Optional의 <를 사용할 수 있습니다. 🎜>

of()
로그인 후 복사

객체 생성 메소드, 입력 매개변수가 null이면 빈 객체가 생성됩니다. 예는 다음과 같습니다.
Optional<String> optStr = Optional.ofNullable(str); // str이 null인 경우 빈 객체를 생성합니다

2. 🎜 >

스트리밍 처리는 Java8이 제공하는 새로운 강력한 기능으로, 컬렉션 작업을 더욱 간결하고 효율적으로 만들어줍니다. Java8의 새로운 기능에 대한 다음 기사에서는 이탈 처리에 대해 포괄적으로 소개합니다. 여기에서는 선택 사항으로 매핑과 필터링이라는 두 가지 기본 이탈 처리도 제공합니다.


시연을 위해 다음과 같이

NullPointException
로그인 후 복사

클래스를 설계했습니다.

ofNullable()
로그인 후 복사

사람에게는 휴대폰과 이메일이 필요하지 않으므로 선택적 정의를 사용하십시오.

매핑: map 및 flatMap



매핑은 입력을 다른 형태의 출력으로 변환하는 작업입니다. 예를 들어 이전 예에서는 문자열을 입력하고 출력합니다. 는 문자열의 길이로, 이를 달성하기 위해

User
로그인 후 복사

메서드를 사용합니다. 사람의 이름을 얻고 싶다고 가정하면 다음과 같이 구현할 수 있습니다.
String name = Optional.ofNullable(user).map(User::getName).orElse("no name"); 이렇게 하면 입력 매개변수 user가 비어 있지 않으면 해당 이름이 반환되고, 그렇지 않으면
/**
 * @author: zhenchao.Wang 2016-9-24 15:36:56
 */
public class User {
    /** 用户编号 */
    private long id;
    private String name;
    private int age;
    private Optional phone;
    private Optional<String> email;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 省略setter和getter
}
로그인 후 복사

가 반환됩니다. 위의 방법으로 전화나 이메일을 받으려면 위의 방법을 사용하세요. 이는 Optional 이후에 반환되기 때문에 작동하지 않습니다. 우리는 이것을 Optional 중첩이라고 부릅니다. 원하는 결과를 얻으려면 한 번만 매핑해야 합니다:

longphone = optUser.map(User::getPhone). map(Optional: :get).orElse(-1L);

실제로 현재로서는 flatMap을 사용하여 한 단계로 원하는 결과를 얻는 것이 더 좋은 방법입니다.

longphone = optUser.FlatMap(User:: getPhone).orElse(-1L);
flapMap은 메서드에서 반환된 각 스트림을 하나의 스트림으로 평면화할 수 있습니다. 이에 대해서는 스트림 처리에 관한 다음 문서에서 자세히 설명합니다.


Filter: filterer


filiter는 이름에서 알 수 있듯이 필터링 작업을 이 메서드에 매개변수로 전달하여 다음의 목적을 달성할 수 있습니다. 필터링 원하는 내용을 추가하세요. 18세 이상의 성인을 필터링하려면 다음을 수행할 수 있습니다.


map()
로그인 후 복사

3. 기본 동작
Optional이 조건을 충족하지 않는 경우 위의 예에서 사용한
과 같은 작업을 수행합니다.
orElse()
로그인 후 복사

就是一个默认操作,用于在Optional对象为空时执行特定操作,当然也有一些默认操作是当满足条件的对象存在时执行的操作。

get()

get用于获取变量的值,但是当变量不存在时则会抛出

NoSuchElementException
로그인 후 복사

,所以如果不确定变量是否存在,则不建议使用

orElse(T other)

当Optional的变量不满足给定条件时,则执行orElse,比如前面当str为null时,返回0。

orElseGet(Supplier<? extends X> expectionSupplier)
로그인 후 복사

如果条件不成立时,需要执行相对复杂的逻辑,而不是简单的返回操作,则可以使用orElseGet实现:

long phone = optUser.map(User::getPhone).map(Optional::get).orElseGet(() -> {
    // do something here
    return -1L;
});
orElseThrow(Supplier<? extends X> expectionSupplier)
로그인 후 복사

与get()方法类似,都是在不满足条件时返回异常,不过这里我们可以指定返回的异常类型。

ifPresent(Consumer)

当满足条件时执行传入的参数化操作。

三. 注意事项

Optional是一个final类,未实现任何接口,所以当我们在利用该类包装定义类的属性的时候,如果我们定义的类有序列化的需求,那么因为Optional没有实现Serializable接口,这个时候执行序列化操作就会有问题:

public class User implements Serializable{
    /** 用户编号 */
    private long id;
    private String name;
    private int age;
    private Optional phone;  // 不能序列化
    private Optional<String> email;  // 不能序列化
로그인 후 복사

不过我们可以采用如下替换策略:

private long phone;
public Optional<Long> getPhone() {
    return Optional.ofNullable(this.phone);
}
로그인 후 복사

看来Optional在设计的时候就没有考虑将它作为类的字段使用~

 以上就是Java8 新特性之 Optional 类 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 8에서 1년 전 또는 1년 후의 날짜를 어떻게 계산합니까? Java 8에서 1년 전 또는 1년 후의 날짜를 어떻게 계산합니까? Apr 26, 2023 am 09:22 AM

Java8은 1년 전 날짜를 계산하기 위해 minus() 메소드를 사용하여 1년 전 또는 1년 후 날짜를 계산합니다. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

Java 8의 선택적 클래스: orElseThrow() 메소드를 사용하여 null일 수 있는 값을 처리하는 방법 Java 8의 선택적 클래스: orElseThrow() 메소드를 사용하여 null일 수 있는 값을 처리하는 방법 Jul 30, 2023 pm 01:57 PM

Java8의 선택적 클래스: orElseThrow() 메서드를 사용하여 null 가능성이 있는 값을 처리하는 방법 소개: Java 개발에서 우리는 null 가능성이 있는 값을 처리하는 상황에 자주 직면합니다. 이전 버전의 Java에서는 일반적으로 값이 없음을 나타 내기 위해 null을 사용했습니다. 그러나 null을 사용하는 데에는 몇 가지 문제가 있습니다. 예를 들어 null인지 자주 확인해야 하며 null 포인터 예외가 발생하기 쉽습니다. 이러한 문제를 해결하기 위해 Java8이 도입되었습니다.

PHP 8.3 출시: 새로운 기능 한눈에 보기 PHP 8.3 출시: 새로운 기능 한눈에 보기 Nov 27, 2023 pm 12:52 PM

PHP8.3 출시: 새로운 기능 개요 기술이 계속 발전하고 변화가 필요함에 따라 프로그래밍 언어는 지속적으로 업데이트되고 개선됩니다. 웹 개발에 널리 사용되는 스크립팅 언어인 PHP는 개발자에게 더욱 강력하고 효율적인 도구를 제공하기 위해 지속적으로 개선되어 왔습니다. 최근 출시된 PHP 8.3 버전에는 오랫동안 기다려온 많은 새로운 기능과 개선 사항이 포함되어 있습니다. 이러한 새로운 기능에 대한 개요를 살펴보겠습니다. null이 아닌 속성의 초기화 이전 버전의 PHP에서는 클래스 속성에 명시적으로 값이 할당되지 않은 경우 해당 값은

PHP8의 새로운 기능을 배우고 최신 기술에 대한 심층적인 이해를 얻을 수 있는 가이드 PHP8의 새로운 기능을 배우고 최신 기술에 대한 심층적인 이해를 얻을 수 있는 가이드 Dec 23, 2023 pm 01:16 PM

최신 기술을 익히는 데 도움이 되는 PHP8의 새로운 기능에 대한 심층 분석입니다. 시간이 지남에 따라 PHP 프로그래밍 언어는 지속적으로 발전하고 개선되었습니다. 최근 출시된 PHP8 버전은 개발자에게 많은 흥미로운 새로운 기능과 개선 사항을 제공하여 개발 작업에 더 많은 편의성과 효율성을 제공합니다. 이 기사에서는 PHP8의 새로운 기능을 심층적으로 분석하고 이러한 최신 기술을 더 잘 익히는 데 도움이 되는 특정 코드 예제를 제공합니다. JIT 컴파일러 PHP8에는 JIT(Just-In-Time) 컴파일이 도입되었습니다.

Java 8을 사용하여 일주일 후 날짜를 계산하는 방법은 무엇입니까? Java 8을 사용하여 일주일 후 날짜를 계산하는 방법은 무엇입니까? Apr 21, 2023 pm 11:01 PM

Java8에서 일주일 후 날짜를 계산하는 방법 이 예에서는 일주일 후 날짜를 계산합니다. LocalDate 날짜에는 시간 정보가 포함되어 있지 않습니다. 해당 plus() 메서드는 일, 주 및 월을 추가하는 데 사용됩니다. ChronoUnit 클래스는 이러한 시간 단위를 선언합니다. LocalDate도 불변형이므로 반환 후 값을 할당하려면 변수를 사용해야 합니다. packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

Java 8의 선택적 클래스: flatMap() 메서드를 사용하여 여러 수준의 중첩된 Null 값을 처리하는 방법 Java 8의 선택적 클래스: flatMap() 메서드를 사용하여 여러 수준의 중첩된 Null 값을 처리하는 방법 Jul 31, 2023 pm 10:33 PM

Java8의 선택적 클래스: flatMap() 메소드를 사용하여 null일 수 있는 다중 레벨 중첩 값을 처리하는 방법 소개: 소프트웨어 개발에서 우리는 null일 수 있는 값을 처리하는 상황에 자주 직면합니다. 이전에는 객체가 비어 있는지 확인하기 위해 if-else 문을 사용할 수 있었지만 이 접근 방식은 장황하고 오류가 발생하기 쉽습니다. Java 8에서는 null이 아닌 선택적 값을 포함할 수 있는 컨테이너 개체인 Optional 클래스를 도입했습니다. Optional 클래스를 사용하는 것이 더 간결하고 안전할 수 있습니다.

php8의 새로운 기능은 무엇입니까 php8의 새로운 기능은 무엇입니까 Sep 25, 2023 pm 01:34 PM

php8의 새로운 기능에는 JIT 컴파일러, 유형 추론, 명명된 매개변수, 공용체 유형, 속성, 오류 처리 개선, 비동기 프로그래밍 지원, 새로운 표준 라이브러리 함수 및 익명 클래스 확장이 포함됩니다. 자세한 소개: 1. JIT 컴파일러, PHP8은 중요한 성능 향상을 제공하는 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 실시간으로 컴파일하고 최적화하여 실행 속도를 향상시킵니다. 개발자가 변수 등을 선언할 때 변수의 유형을 자동으로 추론할 수 있도록 유형 추론 기능을 도입합니다.

Go 언어의 새로운 기능 해석: 프로그래밍을 보다 효율적으로 만들기 Go 언어의 새로운 기능 해석: 프로그래밍을 보다 효율적으로 만들기 Mar 10, 2024 pm 12:27 PM

[Go 언어의 새로운 기능 해석: 프로그래밍을 보다 효율적으로 만들기 위해서는 구체적인 코드 예제가 필요합니다.] 최근 소프트웨어 개발 분야에서 Go 언어가 많은 주목을 받고 있으며, Go 언어의 단순하고 효율적인 디자인 개념이 점점 더 주목을 받고 있습니다. 개발자. 정적으로 유형이 지정된 프로그래밍 언어인 Go 언어는 개발 효율성을 향상하고 코드 작성 프로세스를 단순화하는 새로운 기능을 계속해서 도입하고 있습니다. 이 글에서는 Go 언어의 최신 기능에 대해 심층적으로 설명하고, 구체적인 코드 예제를 통해 이러한 새로운 기능이 제공하는 편리함을 경험하는 방법을 논의할 것입니다. 모듈형 개발(GoModules) 1부터 Go 언어

See all articles