public class PatternMatchingUtils {
// Pattern matching with instanceof (Java 16+)
public static String process(Object obj) {
if (obj instanceof String str) {
return "String: " + str.toUpperCase();
} else if (obj instanceof Integer num) {
return "Integer: " + (num * 2);
} else if (obj instanceof Number num) {
return "Number: " + num.doubleValue();
}
return "Unknown type";
}
// Pattern matching with guarded patterns
public static String processWithGuard(Object obj) {
if (obj instanceof String str && str.length() > 5) {
return "Long string: " + str;
} else if (obj instanceof String str) {
return "Short string: " + str;
}
return "Not a string";
}
// Pattern matching in switch (Java 17+)
public static String processWithSwitch(Object obj) {
return switch (obj) {
case String str -> "String: " + str;
case Integer i -> "Integer: " + i;
case Double d -> "Double: " + d;
case null -> "Null value";
default -> "Unknown: " + obj.getClass().getSimpleName();
};
}
// Pattern matching with sealed classes
public static double calculateArea(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Rectangle r -> r.width() * r.height();
case Triangle t -> 0.5 * t.base() * t.height();
};
}
// Pattern matching with records
public static String describe(Person person) {
return switch (person) {
case Person(String name, int age) when age < 18 -> name + " is a minor";
case Person(String name, int age) when age >= 65 -> name + " is a senior";
case Person(String name, int age) -> name + " is an adult";
};
}
}