V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fordawn
V2EX  ›  Java

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

  •  
  •   fordawn · 2020-09-07 11:28:30 +08:00 · 7361 次点击
    这是一个创建于 1561 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    感觉好像用 Objects 更加对象化

    大佬们一般杂用呢

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

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

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

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

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

    为 null 的时候如果需要抛出业务异常:
    opt.orElseThrow(Exception)
    googoehl
        24
    googoehl  
       2020-09-07 16:40:01 +08:00
    7 楼开发小技巧 可以

    直接 .nn 快捷生成判空代码
    googoehl
        25
    googoehl  
       2020-09-07 16:43:27 +08:00   ❤️ 1
    idea 中类似的后缀补全技巧 .nn

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

    Android Studio/Idea 还可以自己去配置 completion,以前写 Java 的时候自己配置了很多的快捷方式,后来写了一年多的 Kotlin 全扔了...
    yeqizhang
        30
    yeqizhang  
       2020-09-07 23:03:39 +08:00 via Android
    判断为 null 当然是 null == xxxx 哈哈哈
    chendy
        31
    chendy  
       2020-09-07 23:16:10 +08:00
    @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
        32
    admin7785  
       2020-09-07 23:32:00 +08:00 via iPhone
    requireNonNull
    ychost
        33
    ychost  
       2020-09-08 09:27:54 +08:00
    Optional.ofNullable(xx).filter(...).map(...)...orElse(null)
    no1xsyzy
        34
    no1xsyzy  
       2020-09-08 15:28:19 +08:00
    @crayygy 论吹 Kotlin 的技巧
    chenny3
        35
    chenny3  
       2020-09-08 21:38:29 +08:00
    Objects.nonNull
    fordawn
        36
    fordawn  
    OP
       2020-09-15 11:20:33 +08:00
    @yeqizhang 这是 C 留下来的写法嘛?
    fordawn
        37
    fordawn  
    OP
       2020-09-15 11:22:44 +08:00
    @PiersSoCool 有道理,不过 optional 写起来就是感觉好长,但是按意义来说,optional 确实合适
    PiersSoCool
        38
    PiersSoCool  
       2020-09-15 14:39:47 +08:00
    @fordawn 其实我也不愿意这么写,但总是有 xx 的客户、调用者等等会以一种奇怪的方式访问你的代码,为了避免 bug 不得不这么写。以前说好的必须传这个参数,我信了,结果出问题了我背锅;现在说必须传这个参数我就呵呵了,我全都给你判断做异常处理
    fordawn
        39
    fordawn  
    OP
       2020-10-07 12:07:09 +08:00
    @PiersSoCool 说的是,尤其是对接三方的时候,文档写的啥都有,结果不一定哪个是空的,深有体会
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   861 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 22:15 · PVG 06:15 · LAX 14:15 · JFK 17:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.