我想知道为啥 Java 语言为什么怎么混乱 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
bsg1992

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

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

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

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

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

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

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

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


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

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

    File 和 Path

    Array 和 List<T>

    各种 HTTP 客户端

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

    new Date 改成 LocalDateTime.of

    setXxx 改成 withXxx 再赋值回去

    这点事情查个文档就好了

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

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

    同理 JS。

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

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

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

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

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

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

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

    枚举设计最好的是 swift,总是新的超过旧的
    fundebug
        73
    fundebug  
       Sep 11, 2018
    @salamanderMH 如果说开源的话,Javascript 完爆 Java 以及其他各种语言....
    JaxXu
        74
    JaxXu  
       Sep 11, 2018
    楼主大概是想要一个完全符合他个人想法习惯风格的语言,那就自己写一个好了
    taaaang
        75
    taaaang  
       Sep 11, 2018
    构造函数构造复杂枚举有问题? 日期类不停的升级换代,用你喜欢的不久好了?可能楼主需要一门自己的语言。
    gowk
        76
    gowk  
       Sep 11, 2018
    看了王垠的文章,谁知道这个思考题该怎么理解:
    有人指出,Java 的引用类型可以是 null,而原始类型不行,所以引用类型和值类型还是有区别的。但是其实这并不能否认本文指出的观点,你可以想想这是为什么吗?
    HangoX
        77
    HangoX  
       Sep 11, 2018
    历史包袱吧,java 兼容旧版比较多。讲道理枚举有构造方法哪里惹你了。。。
    jorneyr
        78
    jorneyr  
       Sep 11, 2018
    Java 的枚举使用的是 flyweight 设计模式,是个对象池,你心目中的枚举是什么样的呢?
    ihavecat
        79
    ihavecat  
       Sep 11, 2018
    @gabezhao 你为什么可以发动图
    douya0808
        80
    douya0808  
       Sep 11, 2018
    Java8 的日期已经很简洁了吧,8 以下版本引入一下 Joda-Time 也很好用
    mmdsun
        81
    mmdsun  
       Sep 12, 2018 via Android
    @ych8398527 c# unity3d 做游戏工资不低的。
    About     Help     Advertise     Blog     API     FAQ     Solana     3213 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 219ms UTC 14:03 PVG 22:03 LAX 07:03 JFK 10:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86