fordawn
V2EX  ›  Java

大佬们判断对象为 null 是怎么判断的呢?

  •  
  •   fordawn · Sep 7, 2020 · 8684 views
    This topic created in 2256 days ago, the information mentioned may be changed or developed.

    直接使用 != null 还是用 Objects.nonNull 呢

    感觉好像用 Objects 更加对象化

    大佬们一般杂用呢

    39 replies  •  2020-10-07 12:07:09 +08:00
    xuanbg
    xuanbg
    Sep 7, 2020
    1
    != null 不挺好的吗
    x66128
    x66128
    Sep 7, 2020
    2
    在床上看一眼就能判断了
    optional
    optional
    Sep 7, 2020 via iPhone
    3
    Objects.isNullO nonNull requireNonNull
    optional
    optional
    Sep 7, 2020 via iPhone
    4
    现在好久不用 ==null 要不就是 Optional.ofNullable
    fakeJas0n
    fakeJas0n
    Sep 7, 2020❤️1
    5
    null != obj
    havemail
    havemail
    Sep 7, 2020
    6
    现在 Objects 现在用的比较多
    chendy
    chendy
    Sep 7, 2020❤️9
    7
    Objects.nonNull 主要还是当 Objects::nonNull 用的多一些
    平时的逻辑直接 != null 就好,idea 里 .nn 就出来了
    fordawn
    fordawn
    OP
    Sep 7, 2020
    8
    @chendy 学到一招 666
    WngShhng
    WngShhng
    Sep 7, 2020
    9
    要说 null,kotlin 的处理方式是真的好
    echooo0
    echooo0
    Sep 7, 2020
    10
    Objects.nonNull
    kingfalse
    kingfalse
    Sep 7, 2020
    11
    kotlin ?.
    youyouyou0123456
    youyouyou0123456
    Sep 7, 2020❤️1
    12
    c# ?.
    sheeta
    sheeta
    Sep 7, 2020
    13
    php ?->
    xloger
    xloger
    Sep 7, 2020❤️1
    14
    7 楼的方式不错,学到了。我以前用的快捷键是这样的:
    ifn 能快速出来 if(xxx == null),inn 能快速出来 if(xxx != null)。
    也挺方便的,供参考。

    顺带,我也觉得 kotlin 的处理方式最好,现在项目是 Java Kotlin 混编,每次写 Java 需要加各种 if null 就烦躁。
    cheng6563
    cheng6563
    Sep 7, 2020
    15
    !=null 就行了
    用 Objects 是嫌打字不够多么
    FaXiaoKe
    FaXiaoKe
    Sep 7, 2020
    16
    :? 不好用么
    fordawn
    fordawn
    OP
    Sep 7, 2020
    17
    @xloger 又学到一招 666
    raptium
    raptium
    Sep 7, 2020
    18
    我就直接用 != null 。
    Objects.nonNull 应该在作为方法引用的时候比较有用,比如 foo.stream().filter(Objects::nonNull) 这种。
    hhhsuan
    hhhsuan
    Sep 7, 2020
    19
    直接用!=null, Objects.nonNull 不是给你干这种事用
    shm7
    shm7
    Sep 7, 2020
    20
    可以读读实现源码吧。python 就一个 None,用 is not 就行了
    fordawn
    fordawn
    OP
    Sep 7, 2020
    21
    @WngShhng 去看了下 kotlin,区分可空和不可空思路确实先进,代码优化也方便很多
    xiaoliu926
    xiaoliu926
    Sep 7, 2020
    22
    kotlin ?.
    clf
    clf
    Sep 7, 2020
    23
    外部传入的直接在方法上用 NonNull 注解……

    方法内部判断,一般用!= null

    当然,自己写的一些经常可能为 null 或使用时需要判断为 null 的方法,我会用 Optional 封装(很少)。
    return Optional.ofNullable(xxx);

    返回的 opt 对象的后续操作封装过方法的话,就直接:
    opt.ifPresent(doSome);

    为 null 的时候如果需要抛出业务异常:
    opt.orElseThrow(Exception)
    googoehl
    googoehl
    Sep 7, 2020
    24
    7 楼开发小技巧 可以

    直接 .nn 快捷生成判空代码
    googoehl
    googoehl
    Sep 7, 2020❤️1
    25
    idea 中类似的后缀补全技巧 .nn

    还可以参考这个 https://blog.csdn.net/qq_28524127/article/details/88743156
    PiersSoCool
    PiersSoCool
    Sep 7, 2020
    26
    一般都用 Optional 处理可能非空值,因为一般不止一层,都是 a.b.c.d 。这么做省的哪里忘了判断 npe 了。
    newmlp
    newmlp
    Sep 7, 2020
    27
    if (!ptr) {}
    bjking2014
    bjking2014
    Sep 7, 2020 via Android
    28
    @chendy 还有其他的技巧吗,有没有关键字可以查
    crayygy
    crayygy
    Sep 7, 2020
    29
    @bjking2014 #28 这个一般叫 postfix completion, 可以在这里查到 https://www.jetbrains.com/help/idea/settings-postfix-completion.html

    Android Studio/Idea 还可以自己去配置 completion,以前写 Java 的时候自己配置了很多的快捷方式,后来写了一年多的 Kotlin 全扔了...
    yungo8
    yungo8
    Sep 7, 2020 via Android
    30
    判断为 null 当然是 null == xxxx 哈哈哈
    chendy
    chendy
    Sep 7, 2020
    31
    @bjking2014 各种地方.一下从后往前翻就都看到了,常用的语法结构基本都有对应的
    早年和 live template 在一起,现在好像单独拆了,我只会用不会自己写。。。
    .not .if .while
    .var .return .null .nn .new
    遍历的 .for .fori .forr
    加括号 .par ,强转 .cast
    异常的 .try .twr
    还有一些不是 postfix 的,像 psvm sout ( eclipse 是 syso ) thr fori 很多很多。。。
    admin7785
    admin7785
    Sep 7, 2020 via iPhone
    32
    requireNonNull
    ychost
    ychost
    Sep 8, 2020
    33
    Optional.ofNullable(xx).filter(...).map(...)...orElse(null)
    no1xsyzy
    no1xsyzy
    Sep 8, 2020
    34
    @crayygy 论吹 Kotlin 的技巧
    chenny3
    chenny3
    Sep 8, 2020
    35
    Objects.nonNull
    fordawn
    fordawn
    OP
    Sep 15, 2020
    36
    @yeqizhang 这是 C 留下来的写法嘛?
    fordawn
    fordawn
    OP
    Sep 15, 2020
    37
    @PiersSoCool 有道理,不过 optional 写起来就是感觉好长,但是按意义来说,optional 确实合适
    PiersSoCool
    PiersSoCool
    Sep 15, 2020
    38
    @fordawn 其实我也不愿意这么写,但总是有 xx 的客户、调用者等等会以一种奇怪的方式访问你的代码,为了避免 bug 不得不这么写。以前说好的必须传这个参数,我信了,结果出问题了我背锅;现在说必须传这个参数我就呵呵了,我全都给你判断做异常处理
    fordawn
    fordawn
    OP
    Oct 7, 2020
    39
    @PiersSoCool 说的是,尤其是对接三方的时候,文档写的啥都有,结果不一定哪个是空的,深有体会
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2360 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    ♥ Do have faith in what you're doing.