Restrictions in Generics

 

Some Generic Restrictions

There are a few restrictions when using generics in java programming. They involve

1.    creating objects of a type parameter,

2.    static members,

3.    exceptions,

4.    and arrays.

 

Type Parameters Can’t Be Instantiated

It is not possible to create an instance of a type parameter. For example, consider this class:

class Gen<T>

{

     T ob;

     Gen()

     {

ob = new T();    // Error

     }

}

Here, it is illegal to attempt to create an instance of T. The compiler does not know what type of object to create. T is simply a placeholder.

 

Restrictions on Static Members

No static member can use a type parameter declared by the enclosing class. For example, both of the static members of this class are illegal:

class Gen<T>

{

     static T obj;      // Error – no static variables of type T

 

     static T fnGet()      // Error – no static method can use T

     {

          return obj;

     }

}

 


 

Generic Array Restrictions

There are two important generics restrictions that apply to arrays.

1.    First, you cannot instantiate an array whose element type is a type parameter.

2.    Second, you cannot create an array of type-specific generic references.

 

// Generics and arrays – 1

class Gen<T extends Number>

{

     T Sum;

     T Arr [];

 

     Gen()

     {

          Arr = new T[5]; // Invalid

     }

}

class GArr

{

public static void main(String as[])

{

     // Error – cannot create an array of type–specific generic references.

     Gen<Integer> obj2[] = new Gen<Integer>[10];

}

}

 

Arr = new T[5] – is Invalid, since the compiler cannot determine what type of array to create.

 


 

// Generics and arrays – 2

class Gen<T extends Number>

{

     T Sum;

     T Arr [];

     Gen(T[] A)

     {

          Arr = A;  // Valid

     }

}

class GArr

{

public static void main(String as[])

{

     Integer N[] = {1,2,3};

     Gen<Integer> obj1 = new Gen<Integer>(N);

}

}

 

 

Generic Exception Restriction

A generic class cannot extend Throwable – so cannot create generic exception classes.

No comments:

Post a Comment

Don't be a silent reader...
Leave your comments...

Anu