XinLake
V2EX  ›  Java

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

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

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

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

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

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