我想知道为啥 Java 语言为什么怎么混乱

2018-09-10 10:52:11 +08:00
 bsg1992

举个例子,一个基础的日期类型,就有 6 个。为什么不能简洁一点呢,真是想不懂。 枚举还得特么有构造函数我也是醉了。 C#做的就很好,C#在语言层次上真的是完爆 java

9875 次点击
所在节点    程序员
81 条回复
congeec
2018-09-10 13:10:57 +08:00
@tongyang 楼主不该被这样评价
swim2sun
2018-09-10 13:22:48 +08:00
喷得不在点子上。

你有用脚投票的权力,欢迎转 C#,不送
monsoon
2018-09-10 13:24:08 +08:00
因为时间很复杂,所以时间相关的 API 很难设计好……所以 Java 时间相关的 API 修了几次,但是还是不行,所以在 Java 8 又彻底修改了一次。

为什么 C#的日期时间的 API 没那么多问题,因为 Java 比 C# 早了 5 年,所以 C# 有足够的经验可以选择借鉴设计一个更好的时间相关的 API 了。就像 Rust 的设计和类库为什么比起很多旧的语言设计的还要好,因为它有个理论和其他语言实践的地基在那里了,并且不用考虑兼容旧的 API 设计了。而 Java 还要在一开始旧的时间的 API 上进行改进,并且努力做到兼容旧的东西。

为什么 Java 有 File, Files 和 Path 之类的问题?因为 Java 没有 first class 的 Object 支持,另外一个原因是后来的接口都是以 nio 为地基了,而 File 已经是时代所遗留的产物了。所以这里总是有抽象泄漏的。
bumz
2018-09-10 13:27:53 +08:00
Java 目前唯一的缺点是缺少 Value type,这点 Oracle 和 Gosling 也承认了

很多类其实并不需要做成 Stateful,不需要(非抽象的)继承,引入这两者只会带来含糊和混乱

然而从另一个角度没有 Value type 能大大降低虚拟机、Generic 的设计复杂度和实现难度,然而用作补偿的 Escape Analytics 也不是那么可靠。。。

这也是为什么说了这么多年了,Java 的 Value type 连日程都不知道
parkcg
2018-09-10 14:56:49 +08:00
php 和 python 笑而不语
cpdyj0
2018-09-10 15:00:44 +08:00
枚举有构造函数明明可以更灵活,怎么反倒成黑点了?你说日期有好几个,为了兼容旧版本没办法的事。
neptuno
2018-09-10 15:11:58 +08:00
理解了每一个的优缺点就不混乱了,还有,楼主别水了,233
af463419014
2018-09-10 15:34:21 +08:00
如果你能仔细看一下 jdk 里注释的说明,应该就不会有这么多问题了
关键原因就是以前的一些方法不符合国际规范,又不想把这些方法删除,所以只是加了 Deprecated 标记

翻译一下:
Date 是一个用毫秒保存的实例(也就是最终的时间是用一个毫秒数确定)
jdk1.1 以前有两个额外的功能,一个是可以把毫秒转换 year,month,hour 等进行操作(也就是 setYear(2018)这种),一个是可以和字符串互相转换(也就是 new Date("2018-01-01")这种)

但是这些额外的功能**不符合国际规范**,所以在 1.1 后,增加了 Calendar 可以和 date 互相转换,并进行具体时间字段操作(比如 setYear,setHour,getDayOfMonth 这些操作),还增加了 DateFormat 来进行 Date 和 String 的互相转换

相应的功能在 Date 中会标记为 Deprecated(过期)
比如 Date 中的 setHour 就标记了 Deprecated 并写明了可以使用 Calendar.set(Calendar.HOUR_OF_DAY, int hours)替代





wocanmei
2018-09-10 16:31:55 +08:00
xuanbg
2018-09-10 16:40:13 +08:00
一些历史包袱而已,算不得混乱。JavaScript,著名地摊语言了解一下
jinxiaoyan44
2018-09-10 16:46:27 +08:00
gabezhao
2018-09-10 16:48:29 +08:00
住手,你们不要再打了啦!.jpg
CYKun
2018-09-10 17:00:52 +08:00
C#也好意思说 Java, .net 1.1 到 2.0 的时候为了泛型另搞一套容器,至今还有一堆老式类型留在标准库里。

语言要发展总要付出代价,想保持纯洁和完美要么一成不变,要么推到重来。事实证明一成不变的全都死了,推倒重来的如 python 挣扎了十年才看到了胜利的曙光。Java 选择了一条正确的路,即使每天都有无数人指着她的缺点吐槽,也撼动不了她的地位,终不过是土鸡瓦狗止增笑耳。
ZhLTE
2018-09-10 17:02:22 +08:00
单就 equal。。就很乱了
feverzsj
2018-09-10 17:04:18 +08:00
因为 java 就是渣渣
ThinkCat
2018-09-10 17:14:48 +08:00
毕竟那么多年了,各个版本迭代
mosliu
2018-09-10 17:15:27 +08:00
java 这些年来 是能感受到在进步的。
不喜欢的可以用脚投票啊。。
zdnyp
2018-09-10 18:06:16 +08:00
看看隔壁的 Python....
ben1024
2018-09-10 18:32:11 +08:00
要不试试世界上最好的语言-PHP
loryyang
2018-09-10 18:37:41 +08:00
大部分都是历史的包袱,扔不掉只能用妥协的方式来支持
如果你像 python 那样搞,那会给 JAVA 造成重创的

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

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

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

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

© 2021 V2EX