XinLake
V2EX  ›  Java

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

  •  
  •   XinLake · Apr 2, 2018 · 6136 views
    This topic created in 3137 days ago, the information mentioned may be changed or developed.

    这个函数输入一个 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 replies  •  2018-04-03 18:29:12 +08:00
    zollum
    zollum
    Apr 2, 2018 via Android❤️1
    1
    将长度及最后修改时间包装为一个对象类,比如 FileInfo,易于拓展,比如以后需要返回文件名称,使用 index 标识维护麻烦。方法不处理异常,建议直接抛出或者重新封装为自定义异常抛出
    whileFalse
    whileFalse
    Apr 2, 2018
    2
    lz 这写法好像 c...
    raiz
    raiz
    Apr 2, 2018❤️1
    3
    这异常只有 null 异常吧, 直接判断好了,别那么依赖异常机制吧。
    gen900
    gen900
    Apr 2, 2018
    4
    返回 对象啊,返回数组?这谁教的
    AlisaDestiny
    AlisaDestiny
    Apr 2, 2018❤️3
    5
    你这样还不如不要这个方法。
    zhujiaofan111
    zhujiaofan111
    Apr 2, 2018❤️2
    6
    File 类既然有 length()和 lastModified() 方法,为什么还要额外写一个函数来使用
    返回值还放在一个数组里面用下标访问
    异常处理也有问题,为什么不放在这个方法外来判断 file 对象的 null,而是捕获异常 ,用返回值判断
    sudoz
    sudoz
    Apr 2, 2018
    7
    @whileFalse 别黑 C 哈哈
    zcm3579
    zcm3579
    Apr 2, 2018❤️1
    8
    总得有个对象包着 ,你这样还得记着每个索引对应哪个变量
    Miy4mori
    Miy4mori
    Apr 2, 2018
    9
    File 对象里就包含你要的 length 和 lastModified,写个函数再组装成数组通过下标访问是什么操作?
    yippees
    yippees
    Apr 2, 2018
    10
    更加优雅?
    眼拙没看出原来优雅在哪里
    XinLake
    XinLake
    OP
    Apr 2, 2018
    11
    @raiz @cysroad
    异常开销大么?

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

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

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

    让我打个恰当的比喻,这个方式上面插满了目眩神迷的各种 Java 特性,不仅有 @Nullable 还有 try-catch,但仍逃脱不了做养料的命运!
    XinLake
    XinLake
    OP
    Apr 3, 2018 via Android
    21
    @metrxqin 樱樱樱。。。 养料是啥意思?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1558 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 23:29 · PVG 07:29 · LAX 15:29 · JFK 18:29
    ♥ Do have faith in what you're doing.