• 请不要在回答技术问题时复制粘贴 AI 生成的内容
bsg1992
V2EX  ›  程序员

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

  •  
  •   bsg1992 · Sep 10, 2018 · 11532 views
    This topic created in 2979 days ago, the information mentioned may be changed or developed.

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

    81 replies  •  2018-09-12 08:46:19 +08:00
    ychbest
    ychbest
    Sep 10, 2018
    1
    C#工资低 (滑稽)
    q397064399
    q397064399
    Sep 10, 2018
    2
    再看看隔壁 Python ..
    salamanderMH
    salamanderMH
    Sep 10, 2018
    3
    这只是比较小的方面,java 开源方面比 C#好多了
    flyingghost
    flyingghost
    Sep 10, 2018❤️7
    4
    Java 混乱?
    JavaScript 水深火热。
    PHP 笑而不语。
    murmur
    murmur
    Sep 10, 2018
    5
    C#输在微软的策略上 开源的太晚了
    zzf2017
    zzf2017
    Sep 10, 2018
    6
    月经贴变成日经贴了吗?
    cexy
    cexy
    Sep 10, 2018❤️4
    7
    虽然我是个 javaer,但是我坚信 php 天下第一、
    yukiww233
    yukiww233
    Sep 10, 2018
    8
    枚举必须有构造函数???
    引战还不在点上
    amew
    amew
    Sep 10, 2018
    9
    这话说的。。Java 已经好于大多数语言了,你去看看 Kotlin,Python 等等,才多久啊,坑是一个接着一个,JS...算了,我已不想评价
    paparika
    paparika
    Sep 10, 2018
    10
    枚举有构造也算黑点吗,以前好像还真写过利用枚举构造函数的代码
    metrxqin
    metrxqin
    Sep 10, 2018
    11
    百花争鸣不好吗?
    wohenyingyu03
    wohenyingyu03
    Sep 10, 2018
    12
    日期类型什么时候是“基础”了……
    bk201
    bk201
    Sep 10, 2018
    13
    很多时候的啰嗦是为了对老版本程序的兼容.枚举也是类,为什么不能有构造函数?
    keymao
    keymao
    Sep 10, 2018❤️1
    14
    Java 混乱?... 没听说过,我只知道 Spring 这种级别的脚手架,你其他语言的不好找...

    Java 在企业级应用里面目前几乎是不好替代了.. 他要真是混乱你觉得能行么
    lcgui7
    lcgui7
    Sep 10, 2018
    15
    就事论事
    1. 时间日期在 java8 之前确实很烂,之后很好了
    2. C#的枚举不支持复杂对象吧?似乎没有可比性
    lhx2008
    lhx2008
    Sep 10, 2018 via Android
    16
    java8 就直接 localdatetime,之前的 calender 不用了,date 比较通用一点
    lhx2008
    lhx2008
    Sep 10, 2018 via Android
    17
    如果用百度搜索来学习,那么任何语言的学习过程都是混乱的
    murmur
    murmur
    Sep 10, 2018
    18
    不敢苟同 前端的火爆和 JS 没啥关系吧。而且 web 端只有 JS 这一门语言而已,TS 也是扩展了 JS。说实话前端真的是没啥东西。

    我二线大连.NET 开发 3 年经验 32 万 20K*16

    觉得贵可以先用??版,啥时候能支撑的起在买一个正版支持一下

    楼主年薪 32w 你对前端就这个认知么??
    另外宣传 xx 是不是可以 deactivate
    ClutchBear
    ClutchBear
    Sep 10, 2018
    19
    语言这东西,
    主要是看生态....
    wenzhoou
    wenzhoou
    Sep 10, 2018 via Android
    20
    一般项目都会有自己的时间封装吧。如果没有,那就恭喜你。
    ywlvs
    ywlvs
    Sep 10, 2018
    21
    别的不说,楼主你这个标题的语法就很混乱了。
    lovedebug
    lovedebug
    Sep 10, 2018 via Android❤️1
    22
    历史遗留问题,最好搜的时候都带 java8,或者读文档吧
    lihongjie0209
    lihongjie0209
    Sep 10, 2018❤️1
    23
    Date 对象在 JAVA 很早就有了, 以现在的眼光看, 确实有问题.

    后面出来一下其他的类来解决这个问题.

    目前的最优雅的解决方案是 JAVA8 的日期对象.


    混乱? 那倒不至于, 关键是你要理解这些对象存在的意义以及历史原因.

    如果说你非要在 JAVA8 中使用 Date 对象做一下很复杂的操作, 那么混乱的是你.
    AllOfMe
    AllOfMe
    Sep 10, 2018
    24
    没有 apache common 之类的工具库,开发 java 确实比较繁琐
    chenstack
    chenstack
    Sep 10, 2018
    25
    @amew 印象中 Python 诞生比 Java 还要早诶,Python 是 1991 年发行的,不晚了
    chocotan
    chocotan
    Sep 10, 2018
    26
    就两个例子得出 java 混乱的结论
    sampeng
    sampeng
    Sep 10, 2018
    27
    虽然我喜欢 python,但我还是想说 php 世界第一
    javaWeber
    javaWeber
    Sep 10, 2018
    28
    还有 java 的 IO 包。。也挺混乱的。有过度设计的嫌疑。
    tnt666666
    tnt666666
    Sep 10, 2018 via Android
    29
    因为你菜啊
    wizardforcel
    wizardforcel
    Sep 10, 2018
    30
    Java 混乱的地方多了去了。。

    File 和 Path

    Array 和 List<T>

    各种 HTTP 客户端

    还有这个 BufferedReader,我记得 C# 的 StreamReader 是默认带缓冲的
    wizardforcel
    wizardforcel
    Sep 10, 2018
    31
    @lihongjie0209 LocalDateTime 本身不复杂,无非是:

    new Date 改成 LocalDateTime.of

    setXxx 改成 withXxx 再赋值回去

    这点事情查个文档就好了

    混乱的是多个功能相同的名称不同的类
    shijingshijing
    shijingshijing
    Sep 10, 2018
    32
    Java 里面 swap(int a, int b)也不行
    rockyou12
    rockyou12
    Sep 10, 2018
    33
    java 是上世纪 90 年代诞生的,标准库有历史包袱、命名奇怪很正常啊……
    tongyang
    tongyang
    Sep 10, 2018
    34
    你牛逼你写一个
    EPr2hh6LADQWqRVH
    EPr2hh6LADQWqRVH
    Sep 10, 2018
    35
    不是 Java 乱,是 Java 人多。

    人多起来一个不小心就乱了。

    同理 JS。

    你看 Python,最近人也多起来了,看着吧,马上就乱。
    sudoz
    sudoz
    Sep 10, 2018
    36
    你觉得混乱很可能是因为你用的不熟……
    当然也可能是因为用的熟的人已经习惯了
    sonyxperia
    sonyxperia
    Sep 10, 2018
    37
    。。。。。。
    pabupa
    pabupa
    Sep 10, 2018❤️1
    38
    这样的问题,我见一个 block 一个。
    AllOfMe
    AllOfMe
    Sep 10, 2018 via Android❤️1
    39
    @avastms java 有一个好,人越多越不混乱,因为有着强规范
    soleils
    soleils
    Sep 10, 2018
    40
    Java 确实很混乱, 不过开源的东西太多了, 就赢在这点
    congeec
    congeec
    Sep 10, 2018 via iPhone
    41
    @tongyang 楼主不该被这样评价
    swim2sun
    swim2sun
    Sep 10, 2018
    42
    喷得不在点子上。

    你有用脚投票的权力,欢迎转 C#,不送
    monsoon
    monsoon
    Sep 10, 2018❤️1
    43
    因为时间很复杂,所以时间相关的 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
    bumz
    Sep 10, 2018
    44
    Java 目前唯一的缺点是缺少 Value type,这点 Oracle 和 Gosling 也承认了

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

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

    这也是为什么说了这么多年了,Java 的 Value type 连日程都不知道
    parkcg
    parkcg
    Sep 10, 2018
    45
    php 和 python 笑而不语
    cpdyj0
    cpdyj0
    Sep 10, 2018❤️1
    46
    枚举有构造函数明明可以更灵活,怎么反倒成黑点了?你说日期有好几个,为了兼容旧版本没办法的事。
    neptuno
    neptuno
    Sep 10, 2018
    47
    理解了每一个的优缺点就不混乱了,还有,楼主别水了,233
    af463419014
    af463419014
    Sep 10, 2018
    48
    如果你能仔细看一下 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
    wocanmei
    Sep 10, 2018
    49
    xuanbg
    xuanbg
    Sep 10, 2018
    50
    一些历史包袱而已,算不得混乱。JavaScript,著名地摊语言了解一下
    gabezhao
    gabezhao
    Sep 10, 2018❤️1
    52
    住手,你们不要再打了啦!.jpg
    CYKun
    CYKun
    Sep 10, 2018 via Android
    53
    C#也好意思说 Java, .net 1.1 到 2.0 的时候为了泛型另搞一套容器,至今还有一堆老式类型留在标准库里。

    语言要发展总要付出代价,想保持纯洁和完美要么一成不变,要么推到重来。事实证明一成不变的全都死了,推倒重来的如 python 挣扎了十年才看到了胜利的曙光。Java 选择了一条正确的路,即使每天都有无数人指着她的缺点吐槽,也撼动不了她的地位,终不过是土鸡瓦狗止增笑耳。
    ZhLTE
    ZhLTE
    Sep 10, 2018
    54
    单就 equal。。就很乱了
    feverzsj
    feverzsj
    Sep 10, 2018
    55
    因为 java 就是渣渣
    ThinkCat
    ThinkCat
    Sep 10, 2018
    56
    毕竟那么多年了,各个版本迭代
    mosliu
    mosliu
    Sep 10, 2018
    57
    java 这些年来 是能感受到在进步的。
    不喜欢的可以用脚投票啊。。
    zdnyp
    zdnyp
    Sep 10, 2018
    58
    看看隔壁的 Python....
    ben1024
    ben1024
    Sep 10, 2018
    59
    要不试试世界上最好的语言-PHP
    loryyang
    loryyang
    Sep 10, 2018
    60
    大部分都是历史的包袱,扔不掉只能用妥协的方式来支持
    如果你像 python 那样搞,那会给 JAVA 造成重创的
    Guaidaodl
    Guaidaodl
    Sep 10, 2018 via Android
    61
    主要是 Java 坚持向下兼容。而日期的 API 并不是那么好设计的。

    至于 enum 有构造函数我觉得是特别有用的功能。
    May725
    May725
    Sep 10, 2018 via iPhone
    62
    我持不同的意见,觉得 java 的风格挺一致的。有些遗留的问题,你可以选择一种喜欢的方式去解决
    supuwoerc
    supuwoerc
    Sep 10, 2018
    63
    呜呜呜,javascript 无辜中枪..
    tedzhou1221
    tedzhou1221
    Sep 10, 2018 via Android
    64
    好的程序员都是扬长避短,不好的都是总是抓着短处不放
    murmur
    murmur
    Sep 10, 2018
    65
    @ZhLTE 你应该去了解下 js 的类型转换
    woncode
    woncode
    Sep 10, 2018 via Android
    66
    竟然吐槽枚举有构造函数,是你体会不到它的美。java 能发展壮大的很大原因恰恰是它不混乱
    qfdk
    qfdk
    PRO
    Sep 10, 2018 via iPhone
    67
    语言没有好坏 关键是看谁 怎么用...
    wanjun
    wanjun
    Sep 11, 2018 via Smartisan T1
    68
    每一次版本升级都要向前兼容,当然有些设计不好的也必须要保留
    ZhLTE
    ZhLTE
    Sep 11, 2018
    69
    @murmur 不是比谁更乱啊。。java 确实有很多遗留的东西不够友好 只能等一个大改了
    qingfengxm
    qingfengxm
    Sep 11, 2018
    70
    C#工资低
    SunnyCoffee
    SunnyCoffee
    Sep 11, 2018
    71
    看看 OC 再说吧,nil、Nil、NULL 和 NSNull,真是让人头皮发麻
    karllynn
    karllynn
    Sep 11, 2018
    72
    历史问题嘛

    枚举设计最好的是 swift,总是新的超过旧的
    fundebug
    fundebug
    Sep 11, 2018
    73
    @salamanderMH 如果说开源的话,JavaScript 完爆 Java 以及其他各种语言....
    JaxXu
    JaxXu
    Sep 11, 2018
    74
    楼主大概是想要一个完全符合他个人想法习惯风格的语言,那就自己写一个好了
    taaaang
    taaaang
    Sep 11, 2018
    75
    构造函数构造复杂枚举有问题? 日期类不停的升级换代,用你喜欢的不久好了?可能楼主需要一门自己的语言。
    gowk
    gowk
    Sep 11, 2018
    76
    看了王垠的文章,谁知道这个思考题该怎么理解:
    有人指出,Java 的引用类型可以是 null,而原始类型不行,所以引用类型和值类型还是有区别的。但是其实这并不能否认本文指出的观点,你可以想想这是为什么吗?
    HangoX
    HangoX
    Sep 11, 2018
    77
    历史包袱吧,java 兼容旧版比较多。讲道理枚举有构造方法哪里惹你了。。。
    jorneyr
    jorneyr
    Sep 11, 2018
    78
    Java 的枚举使用的是 flyweight 设计模式,是个对象池,你心目中的枚举是什么样的呢?
    ihavecat
    ihavecat
    Sep 11, 2018
    79
    @gabezhao 你为什么可以发动图
    douya0808
    douya0808
    Sep 11, 2018
    80
    Java8 的日期已经很简洁了吧,8 以下版本引入一下 Joda-Time 也很好用
    mmdsun
    mmdsun
    Sep 12, 2018 via Android
    81
    @ych8398527 c# unity3d 做游戏工资不低的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2261 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 217ms · UTC 11:55 · PVG 19:55 · LAX 03:55 · JFK 06:55
    ♥ Do have faith in what you're doing.