import java.util.ArrayList; class Pair { private T first; private T second; public Pair() { } public Pair(T x1, T x2) { first = x1; second = x2; } } public class Main { public static void append(ArrayList list) { // E elem = new E(); // compile-time error: Cannot instantiate the type E // list.add(elem); } public static void append(ArrayList list, E elem) // OK { list.add(elem); } public static void main(String[] args) { String[] x1 = new String[3]; // OK // Error: Cannot create a generic array of Pair // Pair[] x2 = new Pair[3]; Pair li = new Pair<>(); // Type mismatch: cannot convert from Pair to Pair // Pair ln = li; Pair ln = li; // OK } }