美文网首页
Java14不得不知的5个新功能

Java14不得不知的5个新功能

作者: 不安分的程序员天朗 | 来源:发表于2020-07-12 20:02 被阅读0次

    Java14不得不知的5个新功能

    虽然我们现在还用的JDK8

    文本块

    以前在Java里写个长点的字符串是这个样子地:

    String sql = "select * from t_tianlangstudio_student" 

    + " where age > 23 and age < 30" 

    +  " and  sex = 1";

    如果字符串中再包含有双引号还需要转义,虽然有IDE帮忙,但还是时常羡慕Scala、Rust里的文本块(多行字符串)的写法,那个酸爽,Java14里终于也可以这样写了:

    public static String  index = """

    <html>

    <head>

          <title>tianlangstudio</title>

    </head>

    <body>

          <h1>一个不安分的程序员</h1>

    </body>

    </html>

    """;

    是不是清爽多了?

    Switch表达式

    以前使用switch大概是这个样子地 :

    public static int  codeDemo(int i)  {

    int result;

    switch(i) {

    case 1:

    case 2:

            result = 18;

            break;

    case 3:

            result = 28;

            break;

    default:

              result = 100;

              break;

                }

    return result;

    }

    现在可以这样写了:

    public static int code(String s)  {

    int result = switch(s) {

                      case "a"  , "b"  -> 1;

                      case "c"  -> 2;

                      default -> 100;

            }

            return result;

    }

    是不是清爽了很多?Java也开始区分表达式和(声明)语句了?关于表达式和语句可以参考Rust.

    不过Rust里更多使用Match,Java14也对模式匹配有了些许支持,主要体现在instanceOf的使用上。

    instanceOf

    使用instanceOf判断一个变量是否属于某个类型的实例的同时,还能声明一个变量作为当前类型的实例进行更多的判断.就像这个样子:

          public static void demo(Object obj) {

                  if (obj instanceof String s && s.length() > 4) {

                  System.out.println("it is a String and length greater than 4");

                    }

          }

    没看出哪里不一样了?注意看String s 。可以自行脑补下要使用JDK8编写代码是什么样子的?

    record

    有没觉得每次定义个(Java类)POJO,需要写大量的get,set方法还得重写equals方法特别麻烦,是不是也想要Scala中的样例类、Rust中的类元组struct那样简洁的类型定义方式?

    Java14提供了record,可以这样定义类型了:

    public static void main(String[] args) {

    Person person1 = new Person("Tianlang", 23);

    Person person2 = new Person("Tianlang",  23);

    System.out.println(person1.equals(person2));  // true

    }

    public static record Person(String name, int age){}

    就问你清爽不清爽 ?

    更有用的空指针异常提示信息

    你是否也像我一样经常写链式调用的代码,就像这样:

    String str = obj.fieldA.fieldAA.fieldAAA;

    这样写起来可以少费几根头发起变量名称,直到出现了空指针异常,异常信息只告诉你那一行出现了空指针,为了调试代码只好类似这样:

    System.out.println(obj);

    System.out.println(obj.fieldA);

    System.out.println(obj.fieldA.fieldAA);

    String str = obj.fieldA.fieldAA.fieldAAA;

    是否也曾像我一样从心底升起无数个草泥马. 可能是我们的呼唤起了作用,终于在Java14中会告诉你具体那个代码调用出了空指针。记得要在代码执行时设置:

    -XX:+ShowCodeDetailsInExceptionMessages

    如果你像我一样不想升级JDK又想尝试新的写法也可以考虑新语言如:ScalaRust语言.

    相关文章

      网友评论

          本文标题:Java14不得不知的5个新功能

          本文链接:https://www.haomeiwen.com/subject/yaencktx.html