>  Q&A  >  본문

关于java方法里的非空判断的疑问,谢谢

    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)这样的语句。

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

谢谢

天蓬老师天蓬老师2766일 전325

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

  • PHP中文网

    PHP中文网2017-04-17 17:59:57

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

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:59:57

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

    으아아아

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

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:59:57

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

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:59:57

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

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 17:59:57

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

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:59:57

    코드 변경:

    으아아아

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

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

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

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

    으아아아

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:59:57

    개인적 접근 방식:

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

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

    3. 회신하다
      0
  • 怪我咯

    怪我咯2017-04-17 17:59:57

    이 코드는 의미가 없습니다

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