//==================================================================================================
// To allow a method to accept a parameter and/or return a parameter of any type, 
// ... use <anySymbol> (example <T> or <E> or <anyType> before the method return type
// In this case, the method takes an array of any type anyType[] and returns an array of anyType 
// Within a generic method, you can also create a generic variable
//==================================================================================================
public class genericMethod2
{                                                                        
    public static void main(String args[])                       
    {
        Integer[]   intArray    = { 1, 2, 3, 4, 5 };                    //create arrays of different data types
        Double[]    doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray   = { 'H', 'E', 'L', 'L', 'O' };

        System.out.println("Array IntegerArray contains:");
        printArray1(intArray);                                          //pass an Integer array

        System.out.println("\nArray DoubleArray contains:");
        printArray1(doubleArray);                                       //pass a Double array

        System.out.println("\nArray CharacterArray contains:");
        printArray1(charArray);                                         //pass a Character array


        intArray    = printArray2(intArray);                            //pass and return an Integer array
        doubleArray = printArray2(doubleArray);                         //pass and return a  Double array
        charArray   = printArray2(charArray);                           //pass and return a  Character array

    }
    
    static <T> void printArray1( T[] inputArray )                       //a method that takes an array of any type
    {                                                            
        T[] array = inputArray;                                         //create a generic any type array
 
        for(T element : array) 
            System.out.print(element + " ");

        System.out.println();
    }

    static <anyType> anyType[] printArray2( anyType[] inputArray )      //a method that takes an array of any type
    {                                                                   //and returns an array of any datatype 

        anyType[] array = inputArray;                                   //create a generic any type array
 
        for(anyType element : array) 
            System.out.print(element + " ");
        System.out.println();

        return array;                                                   //return an array of any datatype
    }
}