关于java方法里的非空判断的疑问,谢谢
天蓬老师
天蓬老师 2017-04-17 17:57:57
0
8
285
    public static void main(String[] args) {
        String result = replaceStr("jaja");
        if (result != null) {            //在这里又要判断下非空
              int count = 50 + Integer.parseInt(result);
        }
    }
    
    public static String replaceStr(String tem){
        String result;
        if (tem == null) {
            result = null;
        } else {
            String substring = tem.substring(0, 1);
            result = substring;
        }
        return result;
    }

如上代码,我的疑惑时,当参数tem为空,方法返回null,那岂不是又要在调用replaceStr这个方法的地方又要判断次返回值是否为null?那这个代码看上去不是很难看,好多if(**!=null)这样的语句。

我想问的是:有没有一种设计,可以只要在一处判断非空,其他地方只要写业务逻辑就行了?

谢谢

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(8)
Ty80

질문이 좀 혼란스럽고 무엇을 질문하고 싶은지 잘 모르겠습니다.

黄舟

우선 코드가 잘못되었습니다

으아아아

if (tem == null)이어야 합니다.
둘째, 이렇게 변경해도 여전히 엄격하지 않습니다. tem=""이면 else에 문제가 발생합니다.
다시 한번 말씀드리지만 null로 두 번 판단하기에는 무리가 있습니다.
마지막으로 판단 횟수는 비즈니스 논리에 따라 결정됩니다. 한 곳에서 판단 횟수가 줄어들더라도 여전히 다른 곳에서 상환해야 합니다.

大家讲道理

메서드의 반환 값으로 null을 사용하지 않으면 null을 감지할 필요가 없습니다. 예를 들어 예제에서는 "0"만 반환하면 됩니다.

PHPzhong

term 입력 매개변수 해야 하고 null일 수 없다고 확신한다면 일반적인 비즈니스 시나리오에서는 그렇게 할 필요가 없습니다. null 판단할 가치가 있으며 이는 가능한 한 빨리 空指针异常을 폐기하는 것이 합리적입니다.

刘奇

비즈니스 로직의 엄격한 설계를 통해 null이 아닌 판단을 줄일 수는 있지만 코드 유지로 인한 왜곡은 여전히 ​​보장할 수 없으므로 코드의 견고성을 위해 먼저 판단한 후 사용하는 것이 좋습니다. 흩어져 있는 코드 str == null || "".equals(str)가 보기 흉해 보인다면 자체 패키징 도구를 사용하거나 Apache의 StringUtils 등과 같은 오픈 소스 도구를 사용할 수 있습니다.

PHPzhong

코드 변경:

으아아아

먼저 Null이 아닌 것으로 판단해야 하는 비즈니스 요구 사항은 불가피하거나 설계 시 기본값을 추가하고 반환 값이 Null인 경우 기본값을 사용할 수 있습니다(구체적인 상황은 Null이 발생하는 비즈니스에 따라 다름). 값, 다음에 수행할 작업, 기본값 사용, 예외 발생, 실행 종료 등).

기본값 사용에 대해서는 Guava의 MoreObjects#firstNonNull을 참조하세요.

java8의 선택 사항은 이 null 판단 문제를 해결하는 것입니다(사실 판단은 여전히 ​​피할 수 없지만 NullPointerException을 피하는 다른 방법일 뿐입니다). 살펴볼 수도 있습니다.

추가로 직접 Ctrl+C Spring의 StringUtils#replace 메소드를 제공합니다(같은 이유로 Apache Common의 StringUtils를 참조할 수도 있습니다. 어쨌든 Java 세계에서는 StringUtils가 부족하지 않습니다). 다른 사람들이 어떻게 구현하는지 참조하세요.

으아아아
Peter_Zhu

개인적 접근 방식:

  1. null 반환이 필요한 경우가 아니면 null 값을 반환하지 마세요. null 값을 전달하지 마세요. ["Clean Code"에도 이렇게 나와 있습니다.]

  2. null이 반환되지 않으면 방법 1: NPE를 직접 던집니다. 방법 2: Optional을 사용합니다(이렇게 하면 !=null 검사를 잊어버리지 않고 모든 곳보다 더 우아해 보입니다!=).

刘奇

이 코드는 의미가 없습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!