Search code examples
javagenericsintegercharactergeneric-method

How can a parameter in a Generic method be assigned to an Integer and a Character class at the same time?


Why this code isn't showing any compilation error?

public class Generic
{
    public static void main(String[] args)
    {
        Character[] arr3={'a','b','c','d','e','f','g'};
        Integer a=97;
        System.out.println(Non_genre.genMethod(a,arr3));
    }
}

class Non_genre
{
    static<T> boolean genMethod(T x,T[] y)
    {
        int flag=0;
        for(T r:y)
        {
            if(r==x)
                flag++;
        }
        if(flag==0)
            return false;
        return true;
    }
}

If we write a normal code like this(shown below)

public class Hello
{
    public static void main(String[] args)
    {
        Character arr=65;
        Integer a='A';
        if(arr==a)  //Compilation Error,shows Incompatible types Integer and Character
            System.out.println("True");
    }
}   

Then why the above above is running fine,how can T be of Integer class and array of T be of Character class at the same time,and if its running then why its not printing true,ASCII vaue of 'a' is 97,so it should print true.


Solution

  • Because the compiler infers Object as a type argument for your invocation of

    Non_genre.genMethod(a, arr3)
    

    Within the body of that method

    static <T> boolean genMethod(T x, T[] y) {
    

    your type parameter T is unbounded, and so can only be seen as an Object.

    Since x and the elements of y are of the same type (T), they can be compared just fine.

    if (r == x)