Java 10 将引入 var 表示局部变量类型推断(local-variable type inference)功能 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
skyyp
V2EX    程序员

Java 10 将引入 var 表示局部变量类型推断(local-variable type inference)功能

  •  
  •   skyyp 2018-03-15 21:55:43 +08:00 7488 次点击
    这是一个创建于 2768 天前的主题,其中的信息可能已经有所发展或是发生改变。

    官方消息,Java 10 将在 2018 年 3 月 20 号正式发布。迄今为止,在官方放出了 Java 10 少数新特性里面,局部变量类型推断(local-variable type inference) 绝对是备受万众瞩目的。它将我们常常在 JS 里面使用的 var 变量引入到语言特性中,把我们从那些冗长的变量声明中解放出来。来吧,舒展你的右手,下面是你以前绝对没有写过的代码:

    var users = new ArrayList<user>();

    http://blog.csdn.net/rickiyeat/article/details/79101931

    https://blog.codefx.org/java/java-10-var-type-inference/

    45 条回复    2018-03-17 10:34:55 +08:00
    oska117
        1
    oska117  
       2018-03-15 23:35:49 +08:00 via Android
    这样确实舒服,写着看着都不错
    murmur
        2
    murmur  
       2018-03-15 23:36:36 +08:00
    感觉历史在错乱
    js 想尽办法学高级语言搞强类型
    java 在想尽办法摆脱强类型
    geelaw
        3
    geelaw  
       2018-03-15 23:40:35 +08:00   5
    Welcome to 2007 (C#)
    Welcome to 2011 (C++)
    leeg810312
        4
    leeg810312  
       2018-03-15 23:45:47 +08:00 via Android   2
    @murmur var 声明的仍然是强类型,和 js 的 var 完全不同,只是不在声明时指定,而是编译器根据等号后面的类型来推断,这个特性.net 早就有了,java 的语言特性发展还是太保守了
    orangeade
        5
    orangeade  
       2018-03-16 00:11:49 +08:00
    var 有了,val 呢
    twoyuan
        6
    twoyuan  
       2018-03-16 00:15:30 +08:00
    Welcome to Kotlin
    gs139
        7
    gs139  
       2018-03-16 00:18:22 +08:00
    不知道是喜是忧,对 ide 来说,变量声明并不麻烦
    Luckyray
        8
    Luckyray  
       2018-03-16 00:39:12 +08:00 via iPhone
    只是个语法糖吧……少打了几个字
    kingcos
        9
    kingcos  
       2018-03-16 00:45:01 +08:00 via iPhone
    Welcome to Swift
    night98
        10
    night98  
       2018-03-16 01:18:23 +08:00 via Android
    java9 都还没普及。。。
    lsmgeb89
        11
    lsmgeb89  
       2018-03-16 01:24:01 +08:00
    看来 C++ 抄的比 Java 快一点,哈哈
    contmonad
        12
    contmonad  
       2018-03-16 01:29:57 +08:00 via iPhone
    试一下 var cSharp = new ArrayList<>();
    justinwu
        13
    justinwu  
       2018-03-16 01:38:51 +08:00
    C#里面敲了多少年的东西,Java 终于想起来抄了。
    congeec
        14
    congeec  
       2018-03-16 01:59:05 +08:00
    @orangeade 前面加 final
    orangeade
        15
    orangeade  
       2018-03-16 02:11:30 +08:00
    @congeec #14 我就是讨厌 Java 一堆关键字,我还是学 Kotlin 算了
    jeremaihloo
        16
    jeremaihloo  
       2018-03-16 02:32:11 +08:00 via Android   1
    C#十年前的东西,java 现在才有……
    KuroNekoFan
        17
    KuroNekoFan  
       2018-03-16 08:18:36 +08:00 via iPhone
    typescript/swift 这样的大概就是未来的主流语言吧……
    BBCCBB
        18
    BBCCBB  
       2018-03-16 08:51:34 +08:00
    什么时候搞个字符串字面量就好了
    makazeu
        19
    makazeu  
       2018-03-16 09:46:35 +08:00 via Android
    lombok 已经
    makazeu
        20
    makazeu  
       2018-03-16 09:47:44 +08:00
    @makazeu java 使用 lombok 库已经可以这样
    loshine1992
        21
    loshine1992  
       2018-03-16 09:54:22 +08:00
    @orangeade

    kotlin 关键词更多,比较甜
    wayne712
        22
    wayne712  
       2018-03-16 09:54:44 +08:00
    2012 年 C# 5 Async Await 特性,java 要等到哪年 ?
    cstj0505
        23
    cstj0505  
       2018-03-16 10:00:00 +08:00   1
    嫌 java 麻烦的用 scala,写起来保证你爽到爆
    ooo3o
        24
    ooo3o  
       2018-03-16 11:32:06 +08:00
    也真难为了写 Java, C#已经愉快用了十多年的旧东西.
    murmur
        25
    murmur  
       2018-03-16 11:34:00 +08:00
    @ooo3o c#日常要火 现在国内就 unity 里用的多吧
    所以决定生火不火的还是看生态而不是看语言本身有多牛逼的特性
    微软当时傻了 非得去搞 j# 后来被搞了才回过头来推 c#
    ooo3o
        26
    ooo3o  
       2018-03-16 11:36:00 +08:00
    @murmur
    开始 MS 是想和太阳一同发展 Java 的, J#就是个超集, 但太阳排斥 MS 这么搞, 还告了 MS, MS 只能放弃 J#, 完全独立自主弄出来 C#.
    fengyj
        27
    fengyj  
       2018-03-16 11:42:21 +08:00 via Android
    Java 要 js 化了?
    breadenglish
        28
    breadenglish  
       2018-03-16 11:49:58 +08:00
    Object users = new ArrayList<user>();
    jeremaihloo
        29
    jeremaihloo  
       2018-03-16 12:35:55 +08:00 via Android
    @murmur 很大程度上微软那个 CEO 鲍莫尔的问题
    honeycomb
        30
    honeycomb  
       2018-03-16 12:53:26 +08:00 via Android
    @night98 从 java9 开始采取类似 Windows 10 快速发布机制,每半年到发布一个大版本,一部分的大版本属于 lts,会获得长期支持。

    目前 jdk8 的公开支持会延续到 2019 年,那个时候第一个 lts ( jdk11 已经发布)
    XIVN1987
        31
    XIVN1987  
       2018-03-16 13:11:00 +08:00
    final var
    真丑!!
    night98
        32
    night98  
       2018-03-16 14:39:26 +08:00
    @honeycomb 这个可以,问题主要是国内 1.8 还没普及,正在流行中,这 10 版本就出来了,有点丧心病狂。。
    xAx
        33
    xAx  
       2018-03-16 15:03:17 +08:00
    oracle 脑子坏了。把服务端的东西拿来学用户端的产品,刷版本号...
    jdk8 可以战十年,后面的那些不准备学了。
    转 golang
    A555
        34
    A555  
       2018-03-16 16:12:17 +08:00
    没有注释的代码可读性就更差了
    baoanlol
        35
    baoanlol  
       2018-03-16 17:06:45 +08:00   1
    @cstj0505 严重同意!!!就是国内 scala 工作不好找啊。。我都没怎么看到过。。(想跳槽都不知道去哪里
    GoodRainChen
        36
    GoodRainChen  
       2018-03-16 19:16:39 +08:00
    @gs139
    同意,在 ide 里写 java,各种声明一般 3 个字提示也该出来了,弄个 var 省不了多少功夫,还难看
    linbiaye
        37
    linbiaye  
       2018-03-16 19:24:32 +08:00
    什么,java 到 10 了???
    LosLord
        38
    LosLord  
       2018-03-16 19:50:03 +08:00 via Android
    @orangeade 现阶段学 kotlin,还是离不开 java
    huclengyue
        39
    huclengyue  
       2018-03-16 20:00:26 +08:00 via Android
    @leeg810312 这点感觉跟 kotlin 很想。。
    huclengyue
        40
    huclengyue  
       2018-03-16 20:02:09 +08:00 via Android
    @cstj0505 kotlin 可以试试。。目前 jvm 语言里感觉最好的一个
    huclengyue
        41
    huclengyue  
       2018-03-16 20:03:43 +08:00 via Android
    @XIVN1987 val 代替 final var
    panpanpan
        42
    panpanpan  
       2018-03-16 21:10:25 +08:00 via iPhone   1
    IDEA Alt+Entry 了解一下,抱歉我从来不写变量定义。
    panpanpan
        43
    panpanpan  
       2018-03-16 21:11:03 +08:00 via iPhone
    @panpanpan Enter
    secondwtq
        44
    secondwtq  
       2018-03-17 00:16:34 +08:00
    这个东西按照 C++ 的 jargon 来说叫 type deduction,我是觉得这个名字更合适一点的,因为 ML,Haskell,Scala 和 C++11/C#/Java 的所谓 type inference 完全是 different beasts,和 Java 这个类似的在 V 站主流热捧的 Golang 中也有体现
    顺便 80 年代之前代表性的算法 Algorithm W 就已经提出了(根据 wikipedia 最早的 type inference 算法在 58 年就出现了),85 年 Miranda,90 年 Standard ML 标准,这个标准最后一次修订的时候我还在娘胎里

    所以说 10 年不是总量,而是单位
    当然看起来对于 Java 来讲,以世纪作为单位好像也没什么太大的关系
    fox0001
        45
    fox0001  
       2018-03-17 10:34:55 +08:00 via Android
    @breadenglish #28 哈哈哈
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1495 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:23 PVG 00:23 LAX 09:23 JFK 12:23
    Do have faith in what you're doing.
    ubao 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