public class MyGenericPair { /* Calls Mystring.equals(Object) because we don't know thing2 is a MyString. * This is due to type erasure. When compiled, T is replaced by Object * because it is an unbounded type parameter. */ public void diagonal(T thing1, T thing2) { System.out.println(thing1 + " and " + thing2 + " are equal: " + thing1.equals(thing2)); } public static void main(String[] args) { MyGenericPair pair = new MyGenericPair(); pair.diagonal(new MyString("a"), new MyString("b")); // false pair.diagonal(new MyString("c"), new MyString("c")); // false (!) } }