You are on page 1of 5

Шаблонни класове и методи в Java

Шаблонни класове и функции (generics) в Java


Generics означава параметризирани типове. Наричат се шаблонни класове. Идеята е
да се позволи типът на полета (Integer, String, ... и т.н. и дефинирани от
програмиста типове) да бъде параметър за методите и класове. Използвайки
Generics, е възможно да се създадат класове, които работят с различни типове
данни.
1. Шаблонен клас
За да се зададе параметризиран тип при създаването на шаблонен клас се
използват скоби от вида <>.

Синтаксис за създаване на обект на шаблонен клас:


BaseType <Type> obj = new BaseType <Type>()

Не могат да се използват като параметризиран тип примитивни типове


данни, като 'int','char' or 'double'.

Програма 1

// Java програма, илюстрираща действието на дефиниран от програмиста


шаблонен клас
   
class Test<T>
{
    T obj; // An object of type T is declared
    Test(T obj1) {  this.obj = obj1;  }  // constructor
    public T getObject()  { return this.obj; }
}    
// Driver class to test above
class Main
{
    public static void main (String[] args)
    {
        // instance of Integer type
        Test <Integer> iObj = new Test<Integer>(19);
        System.out.println(iObj.getObject());
   
        // instance of String type
        Test <String> sObj =
                          new Test<String>("Generics in Java");
        System.out.println(sObj.getObject());
    }
}

Output:
[Дата]

19
Generics in Java
 

1
Шаблонни класове и методи в Java

В шаблонните класове могат да се прилагат и повече от един параметризирани


типове.
Програма 2
// Java програма,която илюстрира повече от един параметризирани типове
в шаблонен клас
  
class Test<T, U>
{
    T obj1;  // An object of type T
    U obj2;  // An object of type U
  
    // constructor
    Test(T obj11, U obj22)
    {
        this.obj1 = obj11;
        this.obj2 = obj22;
    }
  
    // To print objects of T and U
    public void print()
    {
        System.out.println(obj1);
        System.out.println(obj2);
    }
}
  
// Driver class to test above
class Main
{
    public static void main (String[] args)
    {
        Test <String, Integer> obj =
            new Test<String, Integer>("Generics in Java", 19);
  
        obj.print();
    }
}
Output:
Generics in Java
19
 
[Дата]

2
Шаблонни класове и методи в Java

2. Шаблонни функции

Могат да бъдат дефинирани шаблонни методи, които да бъдат


извиквани с различни типове аргументи въз основа на типа на
аргументите на шаблонния метод, компилаторът ще обработва всеки
метод.

Програма 3
// Java програма, която илюстрира действието на дефинирани от
//програмиста шаблонни функции
   
class Test
{
    // A Generic method example
    static <T> void genericDisplay (T element)
    {
        System.out.println(element.getClass().getName() +
                           " = " + element);
    }
   
    // Driver method
    public static void main(String[] args)
    {
         // Calling generic method with Integer argument
        genericDisplay(11);
   
        // Calling generic method with String argument
        genericDisplay("generics in Java");
   
        // Calling generic method with double argument
        genericDisplay(12.0);
    }
}

Output :

java.lang.Integer = 25
java.lang.String = generics in Java
java.lang.Double = 12.0
 

В шаблонните класове могат да се параметризират само референтни типове


данни
[Дата]

Когато се декларира даден шаблонен клас, типа на аргументите от параметризиран


тип трябва да е референтен . Т. е не могат да се използват примитивни типове, като
int,char..

Грешно!
Test<int> obj = new Test<int>(20); 
3
Шаблонни класове и методи в Java

Този ред би довел до грешка при компилиране. За елиминиране на такива грешки се


използват опаковъчните класове.

3. Особености при използване на шаблонни класове

Създадените на базата на даден шаблонен клас обекти могат да бъдат от различен


тип, ако са създадени на базата на различни типове данни, заместващи
параметризирания тип

Програма 4

// Java програма, илюстрираща дефиниран от програмиста шаблонен клас


// и обекти, създадени на базата на различни типове данни, заместващи
параметризирания тип
   
class Test<T>
{
    // An object of type T is declared
    T obj;
    Test(T obj) {  this.obj = obj;  }  // constructor
    public T getObject()  { return this.obj; }
}
   
// Driver class to test above
class Main
{
    public static void main (String[] args)
    {
        // instance of Integer type
        Test <Integer> iObj = new Test<Integer>(15);  
        System.out.println(iObj.getObject());
   
        // instance of String type
        Test <String> sObj =
                          new Test<String>("Generics in Java");
        System.out.println(sObj.getObject());
        iObj = sObj; //This results an error  
    }
}
Output:

error:
incompatible types:
[Дата]

Test cannot be converted to Test


Макар че iObj и sObj са обекти на клас Test, те са референции към различни типове
данни, защото техните параметри са различни. Затова се казва, че шаблинните
класове увеличават сигурността на кода и пред пазват от грешки.

4
Шаблонни класове и методи в Java

4. Предимства на използването на шаблонните класове. Примери.


 Многократно използване на даден код:
Може да се напише клас или метод веднъж и да се използва за всеки желан тип
данни.
 Сигурност по отношение на типовете :
Шаблонните класове водят до това, грешките да се откриват по време на
компилиране , което винаги е по-добре, отколкото да се установяват по време
на изпълнение.

[Дата]

You might also like