12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import java.util.List;
- import java.util.Locale;
-
- aspect SwitchPatternPreview3Aspect {
- Object around(Object o) : execution(* doSomethingWithObject(*)) && args(o) {
- System.out.println(switch (o) {
- case null -> "null";
- case Integer i -> String.format("int %d", i);
- case Long l -> String.format("long %d", l);
- case Double d -> String.format(Locale.ENGLISH, "double %f", d);
- case String s -> String.format("String %s", s);
- default -> o.toString();
- });
- return proceed(o);
- }
-
- before(Shape s) : execution(* doSomethingWithShape(*)) && args(s) {
- System.out.println(switch (s) {
- case Circle c when (c.calculateArea() > 100) -> "Large circle";
- case Circle c -> "Small circle";
- default -> "Non-circle";
- });
- }
-
- after(S s) : execution(* doSomethingWithSealedClass(*)) && args(s) {
- System.out.println(switch (s) {
- case A a -> "Sealed sub-class A";
- case B b -> "Sealed sub-class B";
- case C c -> "Sealed sub-record C";
- });
- }
-
- Object around(Integer i): execution(* doSomethingWithInteger(*)) && args(i) {
- System.out.println(
- switch (i) {
- case null -> "value unavailable: " + i;
- case -1, 1 -> "absolute value 1: " + i;
- case Integer value when value > 0 -> "positive integer: " + i;
- default -> "other integer: " + i;
- }
- );
- return proceed(i);
- }
- }
-
- class Shape {}
- class Rectangle extends Shape {}
- class Circle extends Shape {
- private final double radius;
- public Circle(double radius) { this.radius = radius; }
- double calculateArea() { return Math.PI * radius * radius; }
- }
-
- sealed interface S permits A, B, C {}
- final class A implements S {}
- final class B implements S {}
- record C(int i) implements S {} // Implicitly final
-
- class Application {
- public static void main(String[] args) {
- doSomethingWithObject(null);
- doSomethingWithObject(123);
- doSomethingWithObject(999L);
- doSomethingWithObject(12.34);
- doSomethingWithObject("foo");
- doSomethingWithObject(List.of(123, "foo", 999L, 12.34));
-
- doSomethingWithShape(new Rectangle());
- doSomethingWithShape(new Circle(5));
- doSomethingWithShape(new Circle(6));
-
- doSomethingWithSealedClass(new A());
- doSomethingWithSealedClass(new B());
- doSomethingWithSealedClass(new C(5));
-
- doSomethingWithInteger(-1);
- doSomethingWithInteger(0);
- doSomethingWithInteger(42);
- doSomethingWithInteger(-99);
- doSomethingWithInteger(Integer.valueOf(123));
- doSomethingWithInteger(null);
- }
-
- public static Object doSomethingWithObject(Object o) { return o; }
- public static void doSomethingWithSealedClass(S s) {}
- public static void doSomethingWithShape(Shape s) {}
- public static Object doSomethingWithInteger(Integer o) { return o; }
- }
|