Giriş
instanceof anahtar kelimesi biraz evrilerek artık pattern matching için de kullanılabiliyor
1. Klasik Kullanım
Sınıfın gerçekte hangi tip olduğunu anlamak için kullanılır.
Örnek
Elimizde şöyle bir hiyerarşi olsun
Sınıfın gerçekte hangi tip olduğunu anlamak için kullanılır.
Örnek
Elimizde şöyle bir hiyerarşi olsun
class Shape {
...
}
class Circle extends Shape {
...
}
Şöyle yaparız.Shape shape = ...;
if (shape instanceof Circle)
{
Circle C = (Circle)shape;
}
2. Pattern MatchingJava 14 JEP 305 ile geliyor. Java 16 ile dilin standardına dahil oldu. Yani artık derlemek için --enable-preview seçeneğini kullanmaya gerek yok.
Şimdilik sadece if statement için kullanılabiliyor. switch statement ile kullanılabilmesi Java 16'da yapılacak.
Örnek
Şöyle yaparız
Örnek - Derleme Hatasıif (animal instanceof Cat cat) {cat.meow();} else if(animal instanceof Dog dog) {dog.woof();}
Elimizde şöyle bir kod olsun
Bu kod şöyle bir derleme hatası verir. Çünkü değişken zaten List arayüzünü gerçekleştirmektedir.var a = new ArrayList<String>();if (a instanceof List l) {System.out.println(l.size());}
Java 17 Pattern MatchingError: pattern type java.util.List is a subtype of expression type
java.util.ArrayList<java.lang.String>
Örnek
Şöyle yaparız
class Shape {}class Rectangle extends Shape {}class Triangle extends Shape {}void testTriangle(Shape s) {switch (s) {case Triangle t && (t.calculateArea() > 100) -> ...default -> ...}}
Java 21 Pattern Matching
Örnek
Şöyle yaparız
// As of Java 16 record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = p.x(); int y = p.y(); System.out.println(x+y); } } // As of Java 21 static void printSum(Object obj) { if (obj instanceof Point(int x, int y)) { System.out.println(x+y); } }
Hiç yorum yok:
Yorum Gönder