자바 에서 optional 의 응용
2344 단어 자바
public class PictureCondition {
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
여기 서 먼저 간단 한 대상 이 있 습 니 다.안에 하나의 속성 만 있 습 니 다.Controller 층 에서 PictureCondition 의 대상 을 받 아야 합 니 다.이 대상 안의 url 속성 이 비어 있 거나 빈 칸 이 있 는 지 판단 해 야 합 니 다.있 으 면 이상 을 던 져 야 합 니 다.
일반적인 문법 을 사용 하면 이렇게 판단 합 니 다.
if(pictureCondition==null||pictureCondition.getUrl()==null||"".equals(pictureCondition.getUrl().trim())){
throw new RuntimeException(" ");
}
Option 을 사용 하 는 방법 은 다음 과 같 습 니 다.
Optional.ofNullable(pictureCondition)
.map(PictureCondition::getUrl)
.filter(x -> !"".equals(x.trim()))
.orElseThrow(() -> new RuntimeException(" "));
단층 순환 에 대해 서 는 일반적인 표기 법 을 사용 해도 대응 할 수 있 지만 층수 가 많 을 때 이렇게 쓰 는 것 은 좋 지 않다.
user!=null 은 진실 입 니 다.연 결 된 orders 의 맵 집합 을 얻 었 습 니 다.가짜 로 빈 집합 으로 돌아 갈 때 우 리 는 위의 orElse,orElseGet 방법 이 모두 힘 이 없 을 때 그것 은 원래 map 함수 의 책임 입 니 다.우 리 는 이렇게 할 수 있 습 니 다.
return user.map(u -> u.getOrders()).orElse(Collections.emptyList())
// Java 8
if(user!=null && user.getOrders!=null) {
return user.getOrders();
} else {
return Collections.emptyList();
}
map 는 무한 연결 이 가능 합 니 다.예 를 들 어 한 층 더 깊이 들 어가 사용자 이름 을 얻 는 대문자 형식 입 니 다.
return user.map(u -> u.getUsername())
.map(name -> name.toUpperCase())
.orElse(null);
이것 은 이전에 두 어야 합 니 다.모든 단계 호출 의 전 개 는 null 값 의 판단 을 넣 어야 합 니 다.
User user = .....
if(user != null) {
String name = user.getUsername();
if(name != null) {
return name.toUpperCase();
} else {
return null;
}
} else {
return null;
}
주의:Option 류 는 빈 지침 의 이상 을 판단 할 때 사용 하 는 것 입 니 다.다른 if.else 는 빈 지침 을 판단 하 는 문제 가 아니라면 Option 류 를 사용 하지 마 십시오.lz 는 잘못된 부분 에 빠 졌 습 니 다.Option 류 를 배 웠 다 고 생각 하고 if..else 를 보면 Option 으로 생각 합 니 다.이렇게 하 는 것 은 정말 큰 잘못 입 니 다.Option 의 경우 값 이 null 인지 아 닌 지 를 판단 할 때 Option 이 역할 을 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.