Java - instanceof Anahtar Sözcüğü

Pazar, Mayıs 24, 2015 kustemura 1 Yorum


Bu yazımda instanceof anahtar sözcüğünün ne işe yaradığını ve kullanımını anlatacağım.
Java'da geçersiz tip dönüşümü bir çalışma hatasına neden olur.Geçersiz tip dönüşümlerinin çoğu çalışma zamanında yakalanabilir.Ancak sınıf hiyerarşisindeki tip dönüşümleri ancak çalışma zamanında algılabilen geçersiz tip dönüşümleri üretebilirler.Bu bir çalışma zamanı hatası fırlatır.Java bu durumlara çözüm bulabilmek için instanceof adında bir çalışma zamanı operatoru tanımlar.
 Kullanım şekli aşağıda olduğu gibidir.

< Örnek Referans > instanceof < Sınıf Tipi>
"Örnek Referans" belirtilen sınıf tipinde ise veya belirtilen tipe dönüştürebiliyorsa true değerini döndürür. Bir örnek ile inceleyelim.
package com.blogger_project;

/**
 * @Author    : Ali Can Kuştemur
 * @Date      : 24 May 2015
 * @File_Name : InstanceOf.java
 * @Blog      : http://kustemura.blogspot.com.tr 
 */
class Ford {
 int weight, model;
}

class Volkswagen {
 int weight, model;
}

class GT extends Ford {
 int speed;
}

class Mustang extends Ford {
 int speed;

}

class InstanceOf {
 public static void main(final String args[]) {
  final Ford car = new Ford();
  final Volkswagen car1 = new Volkswagen();
  final GT car2 = new GT();
  final Mustang car3 = new Mustang();

  if (car instanceof Ford) {
   System.out.println("car örnek referansı ,"
     + " Ford sınıf tipinin bir örneğidir.");
  }
  if (car1 instanceof Volkswagen) {
   System.out.println("car1 örnek referansı ,"
     + " Volkswagen sınıf tipinin bir örneğidir.");
  }
  if (car2 instanceof GT) {
   System.out.println("car2 örnek referansı ,"
     + " GT sınıf tipinin bir örneğidir.");
  }
  if (car3 instanceof Mustang) {
   System.out.println("car3 örnek referansı ,"
     + " Mustang sınıf tipinin bir örneğidir.");
  }
  if (car instanceof GT) {
   System.out.println("car örnek referansı ,"
     + " GT sınıf tipine dönüştürülebilir.");
  }

  System.out.println();

  Ford newCar;

  newCar = car3;

  if (newCar instanceof Mustang) {
   System.out.println("newCar örnek referansı ,"
     + " Mustang sınıf tipinin bir örneğidir.");
  }

  newCar = car2;

  if (newCar instanceof GT) {
   System.out.println("newCar örnek referansı ,"
     + " GT sınıf tipinin bir örneğidir.");
  }

  if (newCar instanceof Mustang) {
   System.out.println("newCar örnek referansı ,"
     + " Mustang sınıf tipine dönüştürülebilir.");
  } else {
   System.out.println("newCar örnek referansı ,"
     + " Mustang sınıf tipine dönüştürülemez!");
  }

  if (newCar instanceof Ford) {
   System.out.println("newCar örnek referansı ,"
     + " Ford sınıf tipine dönüştürülebilir.");
  }

 }
}
Programın Çıktısı:
car örnek değişkeni , Ford sınıf tipinin bir örneğidir.
car1 örnek referansı , Volkswagen sınıf tipinin bir örneğidir.
car2 örnek referansı , GT sınıf tipinin bir örneğidir.
car3 örnek referansı , Mustang sınıf tipinin bir örneğidir.

newCar örnek referansı , Mustang sınıf tipinin bir örneğidir.
newCar örnek referansı , GT sınıf tipinin bir örneğidir.
newCar örnek referansı , Mustang sınıf tipine dönüştürülemez!
newCar örnek referansı , Ford sınıf tipine dönüştürülebilir.

1 yorum :

  1. Merhaba,

    Ufak bir yorum, yayınlamanız agerek yok.

    "< Örnek Referans > instanceof < Sınıf Tipi>" eksik bir ifadedir. Cunku instanceof'tan sonra gelen şey illa sınıf tipi olmak zorunda değildir, hehangi bir reference type olabilir interface ya da enum gibi.

    Kolay gelsin.

    YanıtlaSil