6 * @compile --enable-preview -source 12 ExpressionSwitch.java
7 * @run main/othervm --enable-preview ExpressionSwitch
8 */
9
10 import java.util.Objects;
11 import java.util.function.Supplier;
12
13 public class ExpressionSwitch {
14 public static void main(String... args) {
15 new ExpressionSwitch().run();
16 }
17
18 private void run() {
19 check(T.A, "A");
20 check(T.B, "B");
21 check(T.C, "other");
22 assertEquals(exhaustive1(T.C), "C");
23 assertEquals(scopesIsolated(T.B), "B");
24 assertEquals(lambdas1(T.B).get(), "B");
25 assertEquals(lambdas2(T.B).get(), "B");
26 localClass(T.A);
27 }
28
29 private String print(T t) {
30 return switch (t) {
31 case A -> "A";
32 case B -> { break "B"; }
33 default -> { break "other"; }
34 };
35 }
36
37 private String exhaustive1(T t) {
38 return switch (t) {
39 case A -> "A";
40 case B -> { break "B"; }
41 case C -> "C";
42 case D -> "D";
43 };
44 }
45
56 return switch (t) {
57 case A -> { String res = "A"; break res;}
58 case B -> { String res = "B"; break res;}
59 default -> { String res = "default"; break res;}
60 };
61 }
62
63 private Supplier<String> lambdas1(T t) {
64 return switch (t) {
65 case A -> () -> "A";
66 case B -> { break () -> "B"; }
67 default -> () -> "default";
68 };
69 }
70
71 private Supplier<String> lambdas2(T t) {
72 return switch (t) {
73 case A: break () -> "A";
74 case B: { break () -> "B"; }
75 default: break () -> "default";
76 };
77 }
78
79 private void localClass(T t) {
80 String good = "good";
81 class L {
82 public String c() {
83 STOP: switch (t) {
84 default: break STOP;
85 }
86 return switch (t) {
87 default: break good;
88 };
89 }
90 }
91 String result = new L().c();
92 if (!Objects.equals(result, good)) {
93 throw new AssertionError("Unexpected result: " + result);
94 }
95 }
|
6 * @compile --enable-preview -source 12 ExpressionSwitch.java
7 * @run main/othervm --enable-preview ExpressionSwitch
8 */
9
10 import java.util.Objects;
11 import java.util.function.Supplier;
12
13 public class ExpressionSwitch {
14 public static void main(String... args) {
15 new ExpressionSwitch().run();
16 }
17
18 private void run() {
19 check(T.A, "A");
20 check(T.B, "B");
21 check(T.C, "other");
22 assertEquals(exhaustive1(T.C), "C");
23 assertEquals(scopesIsolated(T.B), "B");
24 assertEquals(lambdas1(T.B).get(), "B");
25 assertEquals(lambdas2(T.B).get(), "B");
26 assertEquals(convert1("A"), 0);
27 assertEquals(convert1("B"), 0);
28 assertEquals(convert1("C"), 1);
29 assertEquals(convert1(""), -1);
30 assertEquals(convert2("A"), 0);
31 assertEquals(convert2("B"), 0);
32 assertEquals(convert2("C"), 1);
33 assertEquals(convert2(""), -1);
34 localClass(T.A);
35 }
36
37 private String print(T t) {
38 return switch (t) {
39 case A -> "A";
40 case B -> { break "B"; }
41 default -> { break "other"; }
42 };
43 }
44
45 private String exhaustive1(T t) {
46 return switch (t) {
47 case A -> "A";
48 case B -> { break "B"; }
49 case C -> "C";
50 case D -> "D";
51 };
52 }
53
64 return switch (t) {
65 case A -> { String res = "A"; break res;}
66 case B -> { String res = "B"; break res;}
67 default -> { String res = "default"; break res;}
68 };
69 }
70
71 private Supplier<String> lambdas1(T t) {
72 return switch (t) {
73 case A -> () -> "A";
74 case B -> { break () -> "B"; }
75 default -> () -> "default";
76 };
77 }
78
79 private Supplier<String> lambdas2(T t) {
80 return switch (t) {
81 case A: break () -> "A";
82 case B: { break () -> "B"; }
83 default: break () -> "default";
84 };
85 }
86
87 private int convert1(String s) {
88 return switch (s) {
89 case "A", "B" -> 0;
90 case "C" -> { break 1; }
91 default -> -1;
92 };
93 }
94
95 private int convert2(String s) {
96 return switch (s) {
97 case "A", "B": break 0;
98 case "C": break 1;
99 default: break -1;
100 };
101 }
102
103 private void localClass(T t) {
104 String good = "good";
105 class L {
106 public String c() {
107 STOP: switch (t) {
108 default: break STOP;
109 }
110 return switch (t) {
111 default: break good;
112 };
113 }
114 }
115 String result = new L().c();
116 if (!Objects.equals(result, good)) {
117 throw new AssertionError("Unexpected result: " + result);
118 }
119 }
|