如题:

  • Sealed Classes(密封类):

    •  密封类是一种限制类继承的机制,它允许您控制哪些类可以继承自该类。通过使用sealed关键字修饰类,您可以指定允许继承的类的白名单。

    •   示例代码:
    • 复制代码
       1 sealed interface Shape permits Circle, Rectangle {
       2     // ...
       3 }
       4 
       5 final class Circle implements Shape {
       6     // ...
       7 }
       8 
       9 final class Rectangle implements Shape {
      10     // ...
      11 }
      复制代码

      在上面的示例中,Shape接口被声明为sealed,并通过permits关键字指定了允许继承的类。CircleRectangle类是Shape接口的实现类。

 

  • Pattern Matching for instanceof(instanceof模式匹配):

    •  Java 14中引入的Pattern Matching for instanceof在Java 15中得到了改进。它允许您在instanceof操作符中使用类型模式,从而简化类型转换和条件判断的代码。

    •    示例代码:
    • 1 if (obj instanceof String str) {
      2     System.out.println(str.length());
      3 } else {
      4     System.out.println("Not a string");
      5 }

      在上面的示例中,instanceof操作符使用了类型模式,并将匹配的结果绑定到了str变量上。这样,我们可以直接在条件判断中访问str变量。

 

  • Text Blocks(文本块):

    •  文本块是一种新的字符串文字形式,它允许您在代码中编写多行字符串,而无需使用转义字符或连接符。这使得编写包含大量文本的字符串更加简洁和可读。

    •    示例代码:
    • 1 String html = """
      2     <html>
      3         <body>
      4             <h1>Hello, World!</h1>
      5         </body>
      6     </html>
      7     """;

      在上面的示例中,我们使用文本块的形式定义了一个HTML字符串,其中包含了多行的文本。这样,我们可以更清晰地编写包含大量文本的字符串。

 

  • Hidden Classes(隐藏类):

    •  隐藏类是一种特殊类型的类,它们在运行时动态生成并用于实现一些高级功能,如动态代理和字节码生成。Java 15中引入了一些API来支持隐藏类的创建和使用。

    •    示例代码:
    • 复制代码
       1 import java.lang.invoke.MethodHandles;
       2 import java.lang.invoke.MethodType;
       3 
       4 public class HiddenClassExample {
       5     public static void main(String[] args) throws Throwable {
       6         MethodHandles.Lookup lookup = MethodHandles.lookup();
       7         MethodHandle mh = lookup.findStatic(Math.class, "sqrt", MethodType.methodType(double.class, double.class));
       8 
       9         double result = (double) mh.invokeExact(16);
      10         System.out.println(result);
      11     }
      12 }
      复制代码

      在上面的示例中,我们使用了Java 15中引入的MethodHandles.Lookup类和MethodHandle类来动态调用Math.sqrt()方法。这是隐藏类的一个应用场景。

 

  • Records(记录类):

    •  记录类是一种新的类声明形式,它提供了一种简洁的方式来定义不可变的数据类。记录类自动生成了equals()hashCode()toString()等方法,从而减少了样板代码的编写。

    •    示例代码:
    • 复制代码
       1 record Person(String name, int age) {
       2     // ...
       3 }
       4 
       5 public class RecordExample {
       6     public static void main(String[] args) {
       7         Person person = new Person("John Doe", 30);
       8         System.out.println(person.name());
       9         System.out.println(person.age());
      10     }
      11 }
      复制代码

      在上面的示例中,我们使用记录类的形式定义了一个Person类,它包含了nameage两个属性。记录类自动生成了equals()hashCode()toString()等方法,使得我们可以方便地访问和比较对象的属性。

 

  总结:

    这些是Java 15中过滤后的一些新特性。它们涵盖了改进现有功能和引入全新功能的各个方面,旨在提高开发者的生产力和代码的可读性