package genericity; public class ArrayOps { /** * @requires A.length >= 1 * @param A a non-empty array of some type * @return the middle element of the array */ static T midpoint (T[] A) { assert A.length >= 1; return A[A.length/2]; } int nonNullLength (T[] A) { int count = 0; for (T t : A) { if (t != null) { count++; } } return count; } public static void main(String[] args) { String result; int count; ArrayOps arrayWorker = new ArrayOps(); //correct usage: result = ArrayOps.midpoint(args); result = ArrayOps.midpoint(args); count = arrayWorker.nonNullLength(args); count = arrayWorker.nonNullLength(args); //correct syntax, poor style result = arrayWorker.midpoint(args); //static member via reference result = arrayWorker.midpoint(args); //static member via reference //compile-time errors // result = midpoint(args); //syntax error // result = ArrayOps.midpoint(args); //type mismatch // count = nonNullLength(args); //syntax error // count - arrayWorker.nonNullLength(args); //type mismatch System.out.println(result + count); } }