From 6df4b88df457784e077f1fd77097dee9c23300f7 Mon Sep 17 00:00:00 2001 From: "He-Pin(kerr)" Date: Tue, 23 Jan 2024 14:37:32 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20Move=20java=2021=20code=20to=20a=20ded?= =?UTF-8?q?icated=20folder=20and=20including=20code=20sni=E2=80=A6=20(#102?= =?UTF-8?q?3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: Move java 21 code to a dedicated folder and including code snippe with tab. * chore: Update OptimizedActorWithJava21.java with new line. --- .../classical/OptimizedActorWithJava21.java | 33 +++++++++++++++ docs/src/main/paradox/actors.md | 40 +++---------------- 2 files changed, 39 insertions(+), 34 deletions(-) create mode 100644 docs/src/main/java-jdk-21/docs/actors/classical/OptimizedActorWithJava21.java 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..ab43f2f35c2 --- /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 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 } @@@