کلاس جنریک

تعریف یک کلاس جنریک بسیار شبیه به تعریف یک متد جنریک است. کلاس جنریک دارای یک علامت بزرگتر و کوچک تر و یک نوع پارامتر خاص می باشد. برنامه زیر مثالی از یک کلاس جنریک می باشد :

   1: package myfirstprogram;
   2: 
   3: import java.text.MessageFormat;
   4: 
   5: class GenericClass
   6: {
   7:     private T someField;
   8: 
   9:     public GenericClass(T someVariable)
  10:     {
  11:         someField = someVariable;
  12:     }    
  13:     
  14:     public void SetSomeProperty(T value)     
  15:     {                                    
  16:        this.someField = value;                
  17:     }                                    
  18:                                           
  19:     public T GetSomeProperty()              
  20:     {                                    
  21:       return someField;                     
  22:     }  
  23: }
  24: 
  25: public class MyFirstProgram 
  26: {  
  27:     public static void main(String[] args) 
  28:     {
  29:         GenericClass genericDouble = new GenericClass(30.50);
  30:         GenericClass genericString = new GenericClass("Hello World!");
  31: 
  32:         System.out.println(MessageFormat.format("Double Value : {0}",
  33:             genericDouble.GetSomeProperty()));
  34:         System.out.println(MessageFormat.format("String Value : {0}",
  35:             genericString.GetSomeProperty()));
  36:     } 
  37: }
Double Value : 30.5
String Value : Hello World!

در مثال بالا یک کلاس جنریک (خطوط 23-5) که دارای یک فیلد (خط 7)، یک خاصیت (خطوط 22-14) و یک سازنده (خطوط 12-9) است را ایجاد می کنیم. تمام مکانهایی که ورودی T در آنها قرار دارد بعدا توسط انواعی که مد نظر شما است جایگزین می شوند. وقتی یک نمونه از کلاس جنریک تان ایجاد می کنید، یک نوع هم برای آن در نظر بگیرید (<int>). مانند متدهای جنریک می توانید چندین نوع پارامتر به کلاسهای جنریک اختصاص دهید.

public class GenericClass<T1, T2, T3>
{
    private T1 someField1;
    private T2 someField2;
    private T3 someField3;  
}

چون نمی دانید T1، T2 و T3 از چه نوعی هستند نمی توانید مانند مثال زیر از آنها نمونه جدید ایجاد کنید.

public GenericClass //Constructor
{
    someField1 = new T1();
    someField2 = new T2();
    someField3 = new T3();
}

کلاسهای غیر جنریک می توانند از کلاسهای جنریک ارث بری کنند، اما باید یک نوع برای پارامترکلاس پایه جنریک تعریف کنید.

public class MyClass extends GenericClass<Integer>
{

}

یک کلاس جنریک هم می تواند از یک کلاس غیر جنریک ارث بری کند.