V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
skyyp
V2EX  ›  程序员

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

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

    官方消息,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#.
    huiyifyj
        27
    huiyifyj  
       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   ·   实用小工具   ·   1259 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:30 · PVG 01:30 · LAX 09:30 · JFK 12:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.