如何优化这段代码更加优雅 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XinLake
V2EX    Java

如何优化这段代码更加优雅

  •  
  •   XinLake 2018-04-02 13:20:27 +08:00 5443 次点击
    这是一个创建于 2831 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个函数输入一个 file,返回 file 的信息。long[0] 是长度,long[1] 是最后修改。不想定义其他的 class,如何更加优雅的返回信息?

    private @Nullable long[] getFileInfo(File file) { try { long length = file.length(); long modified = file.lastModified(); return new long[]{length, modified}; } catch (Exception e) { return null; } } 
    21 条回复    2018-04-03 18:29:12 +08:00
    zollum
        1
    zollum  
       2018-04-02 13:56:57 +08:00 via Android   1
    将长度及最后修改时间包装为一个对象类,比如 FileInfo,易于拓展,比如以后需要返回文件名称,使用 index 标识维护麻烦。方法不处理异常,建议直接抛出或者重新封装为自定义异常抛出
    whileFalse
        2
    whileFalse  
       2018-04-02 14:55:02 +08:00
    lz 这写法好像 c...
    raiz
        3
    raiz  
       2018-04-02 15:19:49 +08:00   1
    这异常只有 null 异常吧, 直接判断好了,别那么依赖异常机制吧。
    gen900
        4
    gen900  
       2018-04-02 16:16:43 +08:00
    返回 对象啊,返回数组?这谁教的
    AlisaDestiny
        5
    AlisaDestiny  
       2018-04-02 17:08:12 +08:00   3
    你这样还不如不要这个方法。
    cysroad
        6
    cysroad  
       2018-04-02 17:19:41 +08:00   2
    File 类既然有 length()和 lastModified() 方法,为什么还要额外写一个函数来使用
    返回值还放在一个数组里面用下标访问
    异常处理也有问题,为什么不放在这个方法外来判断 file 对象的 null,而是捕获异常 ,用返回值判断
    sudoz
      &nbs; 7
    sudoz  
       2018-04-02 17:35:27 +08:00
    @whileFalse 别黑 C 哈哈
    zcm3579
        8
    zcm3579  
       2018-04-02 17:46:42 +08:00   1
    总得有个对象包着 ,你这样还得记着每个索引对应哪个变量
    Miy4mori
        9
    Miy4mori  
       2018-04-02 18:02:13 +08:00
    File 对象里就包含你要的 length 和 lastModified,写个函数再组装成数组通过下标访问是什么操作?
    yippees
        10
    yippees  
       2018-04-02 19:26:52 +08:00
    更加优雅?
    眼拙没看出原来优雅在哪里
    XinLake
        11
    XinLake  
    OP
       2018-04-02 20:56:58 +08:00
    @raiz @cysroad
    异常开销大么?

    @gen900 @zcm3579 @Miy4mori @yippees
    这是临时敲的一段,就看看回复
    murmur
        12
    murmur  
       2018-04-02 20:58:40 +08:00
    单纯为了省行数可以新建个对象 给他个 2 个参数的构造函数就行了
    不过单纯为了省代码而省代码没意思
    对象的好处就是扩展起来容易 尤其是 java 这种语法比较严的
    XinLake
        13
    XinLake  
    OP
       2018-04-02 20:59:29 +08:00
    @whileFalse
    哈哈,这是 java,c 风格的括号不是这么打的吧
    honeycomb
        14
    honeycomb  
       2018-04-02 21:40:43 +08:00   1
    @XinLake

    异常开销当然大
    生成 Throwable 的时候会有一个很重的 native 调用 fillInStackTrace(),但可以关掉:

    Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
    pwrliang
        15
    pwrliang  
       2018-04-03 00:39:48 +08:00
    javafx.util.Pair<Long, Long>
    Kongtou
        16
    Kongtou  
       2018-04-03 08:07:51 +08:00 via Android
    你们懂什么叫异常吗,异常的语义是什么?
    lihongjie0209
        17
    lihongjie0209  
       2018-04-03 08:41:01 +08:00
    你考虑过调用者的感受吗
    pinocc
        18
    pinocc  
       2018-04-03 11:17:32 +08:00
    合并成一行
    johnidy
        19
    johnidy  
       2018-04-03 12:09:08 +08:00
    这个方法好像并没有什么用处
    metrxqin
        20
    metrxqin  
       2018-04-03 12:59:37 +08:00
    在 Java 或者任何面向对象世界,我们称之为方法!

    让我打个恰当的比喻,这个方式上面插满了目眩神迷的各种 Java 特性,不仅有 @Nullable 还有 try-catch,但仍逃脱不了做养料的命运!
    XinLake
        21
    XinLake  
    OP
       2018-04-03 18:29:12 +08:00 via Android
    @metrxqin 樱樱樱。。。 养料是啥意思?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2198 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:04 PVG 00:04 LAX 08:04 JFK 11:04
    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