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

2018-04-02 13:20:27 +08:00
 XinLake

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

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

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

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

让我打个恰当的比喻,这个方式上面插满了目眩神迷的各种 Java 特性,不仅有 @Nullable 还有 try-catch,但仍逃脱不了做养料的命运!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443511

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX