찾다

 >  Q&A  >  본문

Java 中, 是否有方法, 强制某 method 不接受 null 类型参数 ?

让某 method 明确声明: 我不接受 null 参数, 传了 null , 我马上崩溃 !

并且, 该抛错在编译阶段抛出, 不要跑到运行时去

天蓬老师天蓬老师2888일 전479

모든 응답(2)나는 대답할 것이다

  • PHPz

    PHPz2017-04-18 10:36:33

    Java의 유형 시스템은 이를 지원하지 않으며 플러그인: Checker Framework를 통해서만 구현할 수 있습니다. 주석을 추가하려면 컴파일 중에 플러그인을 지정하세요.

    위는 컴파일러의 null 감지를 구현합니다. null이 전달되는 경우 충돌은 플러그인을 통해 null 확인 코드를 삽입하여 수행할 수 있습니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:36:33

    좋은 질문이네요. 저는 평소에 함수를 어떻게 구현하는지에만 집중하는데, 이 질문처럼 Java에서는 왜 이런 방식으로 구현하지 않는지 생각해 본 적이 없습니다. Java 구문이 지원된다면 정말 좋겠지만, 다시 생각해보면 뭔가 잘못된 것 같습니다.

    NullPointerException이 런타임 예외라는 것은 이해가 됩니다

    Java가 이러한 구문을 지원한다고 가정하면 주석을 사용하세요. @NotNull매개변수가 비어 있지 않음을 나타냅니다

    다음과 같은 시나리오: 사용자가 성공적으로 로그인한 후 사용자의 로그인 시간과 IP가 업데이트됩니다.

    사용자 데이터에는 다음이 포함됩니다.

    name password lasttime ip
    aaa 123456 2017-01-09 192.168.1.1
    bbb 123456 2017-01-08 192.168.1.1

    사용자 정보 의사 코드 업데이트:

    으아아아

    @NotNull은 매개변수를 나타냅니다. account은 비워둘 수 없으며 여기에는 문제가 없습니다.

    사용자 정보 확인 로그인 의사 코드 받기:

    으아아아

    우리는 매개변수가 비어 있는 것을 원하지 않고, 반환 값이 비어 있는 것을 원하지 않으므로 문제가 없습니다.

    주요 논리 판단 의사 코드:

    으아아아

    그럼 문제는 account 매개변수를 service.updateAccount() 메소드에 전달할 수 있고 컴파일을 통과할 수 있느냐는 것입니다. 데이터베이스에서 읽어온 Accoount 객체는 본질적으로 모호한 객체일 수도 있고, null일 수도 있습니다.

    그럼 반환 값을 null이 아닌 것으로 만드시겠습니까?

    그렇습니다. NullObject Pattern(NullObject Pattern) 이라는 패턴이 되는데, 이는 결과가 비어 있음을 나타내기 위해 전용 빈 개체를 생성한다는 의미입니다.

    자세한 내용을 확인해주세요:

    • https://segmentfault.com/q/10...

    • http://www.cnblogs.com/haodaw...

    회신하다
    0
  • 취소회신하다