interface MyComparable { public int compareTo(AnyType o); } class Auxiliaries { public static > AnyType findMax( AnyType [] arr) { int maxIndex = 0; for (int i = 1; i < arr.length; i++) { if( arr[i].compareTo( arr[ maxIndex ] ) > 0) maxIndex = i; } return arr[ maxIndex ]; } } class MyFindMaxGen { public static void main( String [] args) { IntHolder [] arr1 = { new IntHolder(11), new IntHolder(21), new IntHolder(17), new IntHolder(34) }; IntHolder ih = Auxiliaries.findMax ( arr1); System.out.println(ih.i); Rectangl [] arr2 = {new Rectangl(5, 2), new Rectangl(5, 3), new Rectangl(6, 4), new Rectangl(6, 2)}; Rectangl rect = Auxiliaries.findMax(arr2); System.out.println(rect.length + ", " + rect.breadth); } } class IntHolder implements MyComparable { int i; public IntHolder (int i1) { i = i1; } public int compareTo(IntHolder o) { if (i > o.i) return 1; if (i == o.i) return 0; if (i < o.i) return -1; return 0; } } class Rectangl implements MyComparable { int length, breadth; public Rectangl (int l, int b) { length = l; breadth = b; } public int compareTo(Rectangl o) { if ( length * breadth > o.length * o.breadth ) return 1; if ( length * breadth == o.length * o.breadth ) return 0; if ( length * breadth < o.length * o.breadth ) return -1; return 0; } }