위리윗
692
2019-12-03 11:21:00
4
376

java lambda 다중객체 null check


안녕하세요

람다식을 사용하여 null체크 로직을 구현하던 중 지식의 한계에 부딪쳐 질문 올려봅니다.

A{
  B b;
}

B{
  T body;
}

위와 같은 구조로 있을 때 함수의 전달인자로 A객체를 넘겨서 null체크를 람다식으로 구현하려 합니다.

function(A a){
member = Optional
                .ofNullable(a)
                .map(A::getB)
                .map(B::getBody)
                .orElse(null);

이에 해당 함수를 위와 같이 구현하였습니다. 이때 map(A::getB)와 .map(B::getBody)의 반환 값에 대한

null체크 또는 empty체크를 구현하려면 어떤식으로 짜야할지 감이 오질 않아 질문 올려봅니다.

시간 되시는 선배님들 조언 좀 주시면 정말 감사하겠습니다.

0
  • 답변 4

  • asd
    16k
    2019-12-03 11:39:08

    getB나 getBody가 null이면 else 에 있는게 반환될텐데요.

    뭐가 궁금하신건가요

  • 위리윗
    692
    2019-12-03 12:54:17

    LichKing

    먼저 답글 달아주셔서 감사합니다.

    현재 a.B에 null값을 set하고 디버깅을 돌려보면 .orElse(null)까지 실행되는 것을 확인하였습니다.

    이에 선행 작업인 .map(A::getB)가 null을 반환할테니 여기서 NullException이 발생하여야 한다고 생각하였습니다.

    하지만 말씀해주신것 처럼 orElse에서 전달한 값이 member에 들어갔고 따로 NullException이 출력되지 않았습니다.

    그렇게 되면 어떤 값이 null이기에 원하는 결과값을 받지 못하였는지 체크가 어렵다고 생각되어

    첫 라인 .orNullable(a)처럼 각 .map(A::getB), .map(B::getBody)에서도 orNullable작업이 이루어져야 한다고 생각하였고 이를 어떻게 적용하여야는지 궁금하여 질문 올렸습니다.

  • asd
    16k
    2019-12-03 13:02:32

    Optional은 그런거 신경쓰지말고 쓰라는 의도인데 원하시는건 굳이 Optional을 쓸필요가 없지않나요?

  • 위리윗
    692
    2019-12-03 13:10:25

    LichKing

    감사합니다

    애초에 기본적인 내용을 생각도 안하고 엉뚱한 것을 생각하다보니 꼬여버렸네요.

    지적해주셔서 정말 감사합니다.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.