Focus mode

Java 102

Generic Bounded Types

Sınırlandırılmış Türler (bounded types)


Jenerik sınıf veya metot tanımlarken parametre olarak aldığınız türü sınırlandırabilirsiniz. Örneğin, parametre olarak aldığım tür Number sınıfının alt sınıflarından biri olsun, diyebilirsiniz. Böyle bir durumda Number sınıfından türetilmemiş hiçbir sınıfı parametre olarak veremezsiniz.


Tür sınırlandırması yaparken extends veya super deyimi kullanılır. Bu deyimlerden sonra bir sınıf veya arayüz ismi verilir. Bu deyimleri kullanarak parametre olarak jenerik türünü sınırlandırmış oluruz:


  • extends deyimini kullandıysak yalnızca belirttiğimiz türü veya alt sınıflarını kullanabiliriz. Buna üst sınır (upper-bound) denir.


  • super deyimini kullandıysak yalnızca belirttiğimiz türün üst sınıflarını kullanabiliriz. Buna alt sınır (lower-bound) denir.


Şimdi yukarıda yazdığımız Nullable sınıfını güncelleyerek bir örnek yapalım:


public class Nullable<T extends Number>
{
    private final T value;
    
    public Nullable(T value)
    {
    	this.value = value;
    }
    public T getValue()
    {
    	return value;
    }
    public boolean isNull()
    {
    	return value == null;
    }
    @Overridepublic String toString()
    {
    	return isNull() ? "null" : value.toString();
    }
}


Yukarıda da gördüğünüz gibi, jenerik Nullable sınıfına aldığımız tür parametresini extends deyimiyle sınırlandırdık. Buna göre bu sınıfı yalnızca Number veya alt türleriyle kullanabiliriz.

Nullable<Integer> nullableInteger = new Nullable<Integer>(2020);
// Bu kullanım uygundur; çünkü Integer, Number sınıfından türetilmiştir 

Nullable<String> nullableString = new Nullable<String>("2020"); 
// Bu kullanım uygun değildir; String, Number sınıfından türetilmemiştir

shift

Comments

You need to enroll in the course to be able to comment!