instanceof İşleci
Dönüştürmeden önce nesne türlerini kontrol etmek ve ClassCastException oluşmasını önlemek için instanceof kullanın.
instanceof İşleci, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
instanceof Operatörü
instanceof operatörü, bir nesnenin çalışma zamanında belirli bir türün örneği olup olmadığını denetler. true veya false döndürür ve dönüştürme işleminden önce ClassCastException oluşmasını önler.
Temel instanceof Kullanımı
Güvenli bir dönüştürme yapmadan önce nesnenin çalışma zamanı türünü denetlemek için instanceof kullanın.
Object obj = "Hello, Java!";
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.toUpperCase()); // HELLO, JAVA!
}
Object num = Integer.valueOf(42);
System.out.println(num instanceof Integer); // true
System.out.println(num instanceof String); // falseKalıtımla instanceof
instanceof, nesne sınıfın veya herhangi bir alt sınıfın (ya da uygulanmış herhangi bir arayüzün) örneğiyse true döndürür.
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true
System.out.println(a instanceof Cat); // falseDesen Eşlemeli instanceof (Java 16+)
Java 16, instanceof için desen eşlemeyi kullanıma sundu: aynı ifade içinde bir bağlama değişkeni tanımlayabilir ve açık dönüştürme gereksinimini ortadan kaldırabilirsiniz.
Object shape = "circle";
// Old way
if (shape instanceof String) {
String s = (String) shape;
System.out.println(s.length());
}
// New way (Java 16+) — binding variable 's' is in scope
if (shape instanceof String s) {
System.out.println(s.length()); // 6
}Bir Yöntemde Desen Eşleme
Desen eşleme, türe dayalı yönlendirmeyi temiz ve güvenli hâle getirir. Bağlama değişkeni yalnızca koşulun doğru olduğu bilinen kapsamda kullanılabilir.
sealed interface Shape permits Circle, Rectangle {}
record Circle(double radius) implements Shape {}
record Rectangle(double width, double height) implements Shape {}
static double area(Shape s) {
if (s instanceof Circle c) {
return Math.PI * c.radius() * c.radius();
} else if (s instanceof Rectangle r) {
return r.width() * r.height();
}
throw new IllegalArgumentException("Unknown shape");
}
System.out.println(area(new Circle(5))); // 78.53...
System.out.println(area(new Rectangle(4, 6))); // 24.0null ile instanceof
null instanceof AnyType her zaman false döndürür; hiçbir zaman hata oluşturmaz. Bu nedenle instanceof, dönüştürme öncesinde denetim yapmak için null güvenli bir yöntemdir.
String s = null;
System.out.println(s instanceof String); // false (not NPE)
Object o = null;
if (o instanceof Number n) {
System.out.println(n.intValue());
} else {
System.out.println("Not a number (or null)"); // prints this
}Switch İfadeleri ve Desen Eşleme
Java 21, desen eşlemeyi switch ifadelerine de genişleterek birbirine zincirlenmiş if-else yapıları olmadan türe dayalı temiz yönlendirme yapılmasına olanak tanır.
static String describe(Object obj) {
return switch (obj) {
case Integer i -> "Integer: " + i;
case Double d -> "Double: " + d;
case String s -> "String of length " + s.length();
case null -> "null value";
default -> "Unknown: " + obj.getClass().getSimpleName();
};
}
System.out.println(describe(42)); // Integer: 42
System.out.println(describe(3.14)); // Double: 3.14
System.out.println(describe("hello")); // String of length 5
System.out.println(describe(null)); // null valueinstanceof Olmadan ClassCastException
Önce denetlemeden dönüştürme yapmak, çalışma zamanında ClassCastException oluşmasına neden olur. Bu, desen eşlemenin önlemeye yardımcı olduğu eski kodlardaki yaygın bir hatadır.
Object obj = "I am a String";
try {
Integer i = (Integer) obj; // ClassCastException!
} catch (ClassCastException e) {
System.out.println("Cannot cast String to Integer");
}
// Safe version
if (obj instanceof Integer i) {
System.out.println("Is integer: " + i);
} else {
System.out.println("Not an integer");
}Uygulama: Karışık Bir Listenin İşlenmesi
Gerçek hayattan bir kullanım alanı: desen eşlemeyi kullanarak farklı türlerdeki nesnelerden oluşan heterojen bir listeyi işlemek.
import java.util.List;
List<Object> events = List.of(
"User login", 42, 3.14, "Payment processed", 100
);
double numericSum = 0;
for (Object e : events) {
if (e instanceof Integer n) numericSum += n;
else if (e instanceof Double d) numericSum += d;
else if (e instanceof String s) System.out.println("Log: " + s);
}
System.out.printf("Numeric sum: %.2f%n", numericSum); // 145.14Mühürlü Sınıflar ve Eksiksiz Eşleme
Mühürlü sınıflar (Java 17+), kendilerini genişletebilecek sınıfları sınırlar. Desen eşlemeli switch ile birlikte kullanıldığında derleyici, tüm durumların ele alındığını doğrulayabilir; varsayılan durum gerekmez.
sealed interface Notification permits EmailNotification, SmsNotification {}
record EmailNotification(String to, String body) implements Notification {}
record SmsNotification(String phone, String text) implements Notification {}
static void send(Notification n) {
switch (n) {
case EmailNotification e ->
System.out.println("Email to " + e.to() + ": " + e.body());
case SmsNotification s ->
System.out.println("SMS to " + s.phone() + ": " + s.text());
// no default needed — compiler knows all cases are covered
}
}Koşullu Desenler
Desen eşleme, tür denetimlerinin yanına mantıksal koşullar eklemek için when (Java 21) ile korumaları destekler.
static String classify(Number n) {
return switch (n) {
case Integer i when i < 0 -> "negative int: " + i;
case Integer i when i == 0 -> "zero";
case Integer i -> "positive int: " + i;
case Double d -> "double: " + d;
default -> "other number";
};
}
System.out.println(classify(-5)); // negative int: -5
System.out.println(classify(0)); // zero
System.out.println(classify(7)); // positive int: 7Hızlı Kontrol
Aşağıdaki ifade ne döndürür?
Object obj = null; boolean result = obj instanceof String; System.out.println(result);
Özet: instanceof Operatörü
Temel çıkarımlar:
- instanceof, çalışma zamanı türünü denetler ve ClassCastException oluşmasını önler
- null için false döndürür; hiçbir zaman NPE oluşturmaz
- Sınıfın kendisi ve tüm alt sınıfları veya arayüzleri için true döndürür
- Java 16+ desen eşleme: if (x instanceof String s), denetim ile dönüştürmeyi birleştirir
- Java 21'de desenli switch, isteğe bağlı korumalarla türe göre temiz yönlendirme yapar
- Mühürlü sınıflar ve eksiksiz switch kullanımı varsayılan durum gereksinimini ortadan kaldırır
Sıkça Sorulan Sorular
“instanceof İşleci” dersi ücretsiz mi?
Evet — “instanceof İşleci” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“instanceof İşleci” dersinde ne öğreneceğim?
Dönüştürmeden önce nesne türlerini kontrol etmek ve ClassCastException oluşmasını önlemek için instanceof kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“instanceof İşleci” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İlkel Türler ve Başvuru Türleri
- Genişletme ve Daraltma Dönüşümleri
- instanceof İşleci
- Uygulamada Tür Dönüştürme