diff --git a/docs/src/main/java-jdk-21/docs/actors/classical/OptimizedActorWithJava21.java b/docs/src/main/java-jdk-21/docs/actors/classical/OptimizedActorWithJava21.java new file mode 100644 index 00000000000..580000c62eb --- /dev/null +++ b/docs/src/main/java-jdk-21/docs/actors/classical/OptimizedActorWithJava21.java @@ -0,0 +1,33 @@ + +// #pattern-matching + +static class OptimizedActorWithJava21 extends UntypedAbstractActor { + public static class Msg1 {} + + public static class Msg2 {} + + public static class Msg3 {} + + @Override + public void onReceive(Object msg) throws Exception { + switch(msg) { + case Msg1 msg -> receiveMsg1((Msg1) msg); + case Msg2 msg -> receiveMsg2((Msg2) msg); + case Msg3 msg -> receiveMsg3((Msg3) msg); + default _ -> unhandled(msg); + } + } + + private void receiveMsg1(Msg1 msg) { + // actual work + } + + private void receiveMsg2(Msg2 msg) { + // actual work + } + + private void receiveMsg3(Msg3 msg) { + // actual work + } +} +// #pattern-matching \ No newline at end of file diff --git a/docs/src/main/paradox/actors.md b/docs/src/main/paradox/actors.md index 44e205bb8bc..86fcccbd877 100644 --- a/docs/src/main/paradox/actors.md +++ b/docs/src/main/paradox/actors.md @@ -838,42 +838,14 @@ that the JVM can have problems optimizing and the resulting code might not be as untyped version. When extending `UntypedAbstractActor` each message is received as an untyped `Object` and you have to inspect and cast it to the actual message type in other ways, like this: -@@snip [ActorDocTest.java](/docs/src/test/java/jdocs/actor/ActorDocTest.java) { #optimized } +In addition, Java 21 introduces [powerful pattern matching for switch](https://openjdk.org/jeps/441) supporting any +reference type. We can use `switch` instead of `if ... else ...` for conditional branches: -In addition, Java 21 introduces [powerful pattern matching for switch](https://openjdk.org/jeps/441) supporting any reference type. We can use `switch` instead of `if ... else ...` for conditional branches: - -```java -static class PatternMatchedActor extends UntypedAbstractActor { - - public static class Msg1 {} - - public static class Msg2 {} - - public static class Msg3 {} - - @Override - public void onReceive(Object msg) throws Exception { - switch(msg) { - case Msg1 msg -> receiveMsg1((Msg1) msg); - case Msg2 msg -> receiveMsg2((Msg2) msg); - case Msg3 msg -> receiveMsg3((Msg3) msg); - default _ -> unhandled(msg); - } - } - - private void receiveMsg1(Msg1 msg) { - // actual work - } - - private void receiveMsg2(Msg2 msg) { - // actual work - } +Java +: @@snip [ActorDocTest.java](/docs/src/test/java/jdocs/actor/ActorDocTest.java) { #optimized } - private void receiveMsg3(Msg3 msg) { - // actual work - } - } -``` +Java 21 +: @@snip [OptimizedActorWithJava21.java](/docs/src/main/java-jdk-21/docs/actors/classical/OptimizedActorWithJava21.java) { #pattern-matching } @@@