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

Java 方法的返回值到底用基本类型好还是包装类型好

  •  2
     
  •   ohyeahhh · 2019-05-21 11:25:41 +08:00 · 5998 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直有这个疑问,百度也搜了,找不到满意的答案,所以来问问神通广大的 V 友们

    32 条回复    2019-05-30 18:51:43 +08:00
    HongJay
        1
    HongJay  
       2019-05-21 11:30:43 +08:00
    基本类型吧
    lofbat
        2
    lofbat  
       2019-05-21 11:34:14 +08:00 via iPhone
    个人觉得对象类型更灵活,看下面有没有高见
    NeinChn
        3
    NeinChn  
       2019-05-21 11:34:26 +08:00   ❤️ 6
    如果不需要区分 0 和 null,那就基本类型
    不然就统一用包装类型
    HuasLeung
        4
    HuasLeung  
       2019-05-21 11:37:11 +08:00
    包装类吧,能涵盖返回为 null 的情况
    cxtrinityy
        5
    cxtrinityy  
       2019-05-21 11:39:53 +08:00 via Android   ❤️ 2
    这难道不是看需要的么?一般返回基本类型就够了,毕竟只要一个值,创建对象也是要开销的
    ohyeahhh
        6
    ohyeahhh  
    OP
       2019-05-21 11:41:59 +08:00
    个人感觉是不是 如果方法返回值可能会做比较时用包装类型,如果只是单纯的用一下,就直接用基本类型就可以了
    lhx2008
        7
    lhx2008  
       2019-05-21 11:42:22 +08:00   ❤️ 1
    如果有可能返回 null,用 Optional 包装
    如果不会返回 null,用基本类型就行,向标准库看齐
    Luckyray
        8
    Luckyray  
       2019-05-21 11:45:33 +08:00   ❤️ 1
    包装类,不然会有默认值的问题。
    ohyeahhh
        9
    ohyeahhh  
    OP
       2019-05-21 11:45:49 +08:00
    @lhx2008 感觉这样的话好像就把包装类型的特性给抛弃了
    Takamine
        10
    Takamine  
       2019-05-21 11:46:40 +08:00
    看业务吧,但是推荐包装类,对于具体的返回 NPE 等给调用者去保证。
    szq8014
        11
    szq8014  
       2019-05-21 11:52:21 +08:00
    取决于习惯吧,我个人是用基本类型的
    lhx2008
        12
    lhx2008  
       2019-05-21 11:54:06 +08:00 via Android
    @ohyeahhh 有啥特性,Optinnal 也是包装类呀,Optinal<Interger>
    bxb100
        13
    bxb100  
       2019-05-21 11:57:32 +08:00 via Android
    你想优化的话就用基本类型,一般使用包装类型
    reeco
        14
    reeco  
       2019-05-21 11:59:18 +08:00 via Android
    全部用包装类型
    zisway
        15
    zisway  
       2019-05-21 12:19:26 +08:00
    对外接口返回值用包装类型,内部私有的基本类型就可以了。
    micean
        16
    micean  
       2019-05-21 12:31:44 +08:00
    基本类型能显著的告诉调用者不必做非空检查,如果有这个必要的话
    否则以减少拆装包为优先
    ChanKc
        17
    ChanKc  
       2019-05-21 12:42:03 +08:00
    Effective Java Item 61: Prefer primitive types to boxed primitives

    包装类型效率低而且容易产生 NPE,实际上就是把 NPE 甩锅给调用者。负责任的程序员都会用基本类型,即便用包装类型也应该写好 javadoc。
    zxcjqyy
        18
    zxcjqyy  
       2019-05-21 12:42:18 +08:00
    看情况灵活应用呀
    johnniang
        19
    johnniang  
       2019-05-21 12:47:26 +08:00 via Android
    如果有业务需求,建议用 Optional<Type>;
    如果很纯粹,那就返回基本类型即可。
    rockyou12
        20
    rockyou12  
       2019-05-21 12:53:00 +08:00
    能用基本类型绝不要用包装类,我清楚很多用包装类型是应为数据库默认值一般为 null。但用包装类型生产环境的空指针异常会让你想死(特别是 java 的自动装箱、拆箱,你写的时候根本不会考虑数据是不是 null 的)。这点 kotlin 有?来保证安全,真的好太多
    nkduqi
        21
    nkduqi  
       2019-05-21 13:10:17 +08:00
    如果是对外的接口,一般不适用基本类型,都使用包装类型;
    如果是应用内部自己用,则可以使用基本类型;
    guyeu
        22
    guyeu  
       2019-05-21 14:14:38 +08:00
    1. 优先项目内部代码规范;
    2. 如果你的方法设计上不会返回 null,请使用基本类型;
    3. 如果你的方法设计上会返回 null,使用 Optional 包装,在语义上告诉使用者返回值有可能为空;
    enaxm
        23
    enaxm  
       2019-05-21 14:20:00 +08:00
    对内你随意,不过我一般用包装类型,想到之前有个同事问我 int 能不能返回 null,我都不知道怎么吐槽。。。

    系统内部一般有共有的工程打成 jar 包,常见的错误类型、宏定义等等,maven 里头连着 nexus,maven 中引入这个包

    对外一般不返回一个当然包装
    c4f36e5766583218
        24
    c4f36e5766583218  
       2019-05-21 14:40:26 +08:00
    boolean,其它包装?
    cuzfinal
        25
    cuzfinal  
       2019-05-21 17:25:29 +08:00
    用基本对象,减少装箱
    alittlefun
        26
    alittlefun  
       2019-05-21 18:40:13 +08:00 via Android
    参考 api 返回类型
    oneisall8955
        27
    oneisall8955  
       2019-05-21 19:54:16 +08:00 via Android
    看需求~假如纯属自己做接口,爱咋用就咋用,写清楚返回是什么含义就行了
    sagaxu
        28
    sagaxu  
       2019-05-21 21:52:58 +08:00 via Android
    java 标准库都是返回基本类型,Java 标准制定者们,应该比较懂 Java 吧

    如果同事都是菜鸡,还是建议装箱类型,他们需要
    BlackZhu
        29
    BlackZhu  
       2019-05-22 10:50:31 +08:00
    请教一下 我想返回一条数据 不创建实体的话 难道装在 map 里面返回吗?
    BlackZhu
        30
    BlackZhu  
       2019-05-22 10:55:18 +08:00
    如果返回实体的话会有很多空字段 但是给每个方法写不同的 dto 又太繁琐了 各位是如何处理的?
    nekoneko
        31
    nekoneko  
       2019-05-22 11:01:11 +08:00
    @BlackZhu 反 Object
    lazyfighter
        32
    lazyfighter  
       2019-05-30 18:51:43 +08:00
    包装类,null 跟 0 有可能两个含义
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.