大佬们判断对象为 null 是怎么判断的呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fordawn
V2EX    Java

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

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

    直接使用 != 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     Solana     5041 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 05:47 PVG 13:47 LAX 21:47 JFK 00:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86