25 Ocak 2015 Pazar

Generics-2

      S.a. Arkadaşlar,
      Bugünkü konumuz genericsler olacak. Daha önce özet maheyetinde bir yazı yazmıştım ama şimdi daha farklı bir özellikleri ile ele alacağız. Birinci yazıya buradan erişebilirsiniz. Bu konuyla ilgili temel bilgileri orada bulabilirsiniz. Burada biraz daha ayrıntılı olarak ele almaya çalışacağız. Belki konuya paldır küldür girmiş gibi olacağız ama yaptığımız örnekler jeneriklerin özellikleri ile ilgili neler yapılıp neler yapılmayacağı ile ilgili gibi düşünün. Şöyle söylememek gerekirse bildiğimiz gibi dizilerde IS-A kavramını kullanmamıza izin veriyordu, fakat jeneriklerde nasıl oluyor diye bir soru aklımıza gelirse ? Bir bakalım hemen nasıl olduğuna ..

class Living {
 
}

class Animal extends Living{
 
}

class Dog extends Animal {

}

public class ArrayTestMethod {

public static void main(String[] args) {
Animal[] animalArray = new Animal[5];
Dog[] dogArray = new Dog[5];
Animal[] animalDogArray = new Dog[5];
                //burada görüldüğü gibi Dog IS-A Animal
                //olduğundan hata olmayacaktır
             
arrayRules(animalArray);
arrayRules(dogArray);
arrayRules(animalDogArray);
                /******************************/
                List<Animal> animalList = new ArrayList<Animal>();
List<Dog> dogList = new ArrayList<Dog>();
                List<Living> livinglist= new ArrayList<>();

addAnimal(animalList);
addAnimal(dogList);//dikkat
                //eğer = extends wildcardsı kullanılmasa
                //Dog subclass bile olsa error verecektir
                //ama dizilerde böyle bir durum yok
             
                //addAnimal(livinglist);//dikkat ? extends wildcardı
                //yerine ? super olsa bu kod çalışacaktır fakat bu sefer de
                //dogList çalışmayacaktır. Çünkü Super üst sınıflara izin verirken
                //extends ise altı sınıflara izin verir.
             
             
}

public static void arrayRules(Animal[] animal) {
System.out.println("test");
}
     
        public static void addAnimal(List<? extends Animal> animalList) {
            //burada ise sadece null ekleyebiliriz
            animalList.add(null);
            //? extends kaldırdığımız zaman
            //addAnimal(new Dog()); gibi bir tanımla yapılabilir
}
}


Hiç yorum yok:

Yorum Gönder