package thirty_days_of_code;

import java.lang.reflect.Method;

/*
 * Problem Statement:
 * Generic methods are a very efficient way to handle multiple datatypes using a
 * single method.
 * 
 * Let's say you have an integer array and a string array. You have to write a
 * single method printArray that can print all the elements of both arrays. The
 * method should be able to accept both integer arrays or string arrays.
 * 
 * You are given code in the editor. Complete the code so that it prints the
 * following lines:
 * 1
 * 2
 * 3
 * Hello
 * World
 * 
 * Do not use method overloading because your answer will not be accepted.
 */
public class Generics {

	public static void main(String args[]) {
		Printer myPrinter = new Printer();
		Integer[] intArray = { 1, 2, 3 };
		String[] stringArray = { "Hello", "World" };
		myPrinter.printArray(intArray);
		myPrinter.printArray(stringArray);
		int count = 0;
		for (Method method : Printer.class.getDeclaredMethods()) {
			String name = method.getName();
			if (name.equals("printArray"))
				count++;
		}

		if (count > 1)
			System.out.println("Method overloading is not allowed!");
		assert count == 1;

	}
}

class Printer {
    
   public <T> void printArray(T[] arr) {
       for (T o : arr) {
           System.out.println(o);
       }
   }
}
Add Generics