-- Java SE

Upper/Lower Bounded Wildcards

Daha önce belirttiğim gibi Box<T> şeklinde parametrelendirilmiş bir sınıfa herhangi bir türden nesne atabiliyorduk.Örneğin;

public class Box<T>{

    private T t;

    public T getT() {return t;}

    public void addT(T t) {this.t = t;}

   public static void main(String args[]){

        Box box = new Box();
        
        box.addT(new Integer(20));
        System.out.println(box.t.getClass().getName());

        box.addT("meriç");
        System.out.println(box.t.getClass().getName());

   }

}

Koddan da anlaşılacağı üzere t değişkeni hem Integer türünde hem String türünde olabilecek ve program çıktısı şu şekilde olacaktır.

java.lang.Integer
java.lang.String

Sınır olayı burda devreye girer.Örneğin;

  • Box<T extends Number> dediğimizde ;

T sadece Number ve Number’in alt sınıfları olabilir

  • Box<T super Integer> dediğimizde ;

T sadece Integer ve Integer’in üst sınıfları olabilir.

public class Box<T extends Number>{ // Üst sınır Number 

    private T t;

    public T getT() {return t;}

    public  void addT(T t) {this.t = t;}

   public static void main(String args[]){

        Box box = new Box();

        box.addT(new Integer(20));
        System.out.println(box.t.getClass().getName());

        box.addT("meriç"); // Hata verir.Strıng,Number'in alt sınıfı değil.
        System.out.println(box.t.getClass().getName());

   }

}

 

Yorum bırak

Yorum