请求提供JEP 12预览语言/VM特性的代码使用示例
Awesome question! Let's start with a key clarification: JEP 12 isn't a specific language or VM feature—it's the framework that introduced preview features to Java. It established the process for releasing fully specified, implemented features that aren't yet permanent, so the Java team can gather real-world feedback before deciding to make them part of the standard platform.
With that out of the way, here are code examples of some notable preview features that leveraged this JEP 12 mechanism:
1. Local-Variable Type Inference (var) - JEP 286 (Preview in JDK 10)
One of the first widely used preview features, var lets the compiler infer the type of local variables, reducing boilerplate:
// Traditional explicit type declaration List<String> userNames = new ArrayList<>(); // Using the var preview feature var userNames = new ArrayList<String>(); // Compiler infers ArrayList<String> // Iteration example with var var numbers = List.of(10, 20, 30); for (var num : numbers) { System.out.println("Double: " + num * 2); }
Important: To compile and run code using preview features, you need to enable the flag:
javac --enable-preview -source 10 VarExample.javajava --enable-preview VarExample
2. Text Blocks - JEP 378 (Preview in JDK 15)
Text blocks eliminated the need for messy string concatenation and escape sequences when working with multi-line strings:
// Pre-text-block approach (verbose and error-prone) String jsonPayload = "{\n" + " \"name\": \"Alice\",\n" + " \"age\": 30,\n" + " \"isActive\": true\n" + "}"; // Using the text block preview feature String jsonPayload = """ { "name": "Alice", "age": 30, "isActive": true } """;
This feature graduated to a permanent part of Java in JDK 15 after positive feedback.
3. Pattern Matching for instanceof - JEP 305 (Preview in JDK 14)
This preview feature simplified type checking and casting into a single, concise step:
// Traditional type check + cast if (object instanceof Integer) { Integer num = (Integer) object; System.out.println("Square: " + num * num); } // Using pattern matching preview feature if (object instanceof Integer num) { System.out.println("Square: " + num * num); // num is already cast to Integer }
This feature went through two preview rounds (JDK 14 and 15) before becoming permanent in JDK 16.
All these features relied on JEP 12's process to be released as previews, collect developer input, and evolve into standard Java features (or, in rare cases, be removed if feedback was negative).
内容的提问来源于stack exchange,提问作者Rann Lifshitz

