import java.util.*; class GetClass { native void unknown(); private Class myCls; void testSimple(Class cls, Number n) { if (cls.equals(n.getClass())) {} if (cls == n.getClass()) {} if (myCls == n.getClass()) {} } public static void testIntClass() { Class cls = someIntClass(); System.out.println(Object.class.isAssignableFrom(cls)); } public static Class someIntClass() { return int.class; } void testStability(Object obj, Class c) { if (obj.getClass().equals(c)) { unknown(); if (obj.getClass().equals(c)) { } } if (obj.getClass().equals(ArrayList.class)) { unknown(); if (obj.getClass().equals(ArrayList.class)) { } } } void testFinalClass(String s) { if (s.getClass() == String.class) { } if (String.class.equals(s.getClass())) {} } void testNew() { Object x = new HashSet(); if (x.getClass() == HashSet.class) {} } void testInstanceOfInterop(Object obj) { if (obj instanceof CharSequence) { if (obj.getClass() == Integer.class) {} } if (obj.getClass() == HashSet.class) { if (obj instanceof Set) {} if (obj instanceof LinkedHashSet) {} } if (obj instanceof HashSet) { if (obj.getClass() == HashSet.class) {} // possible but not always if (obj.getClass() == LinkedHashSet.class) {} // also possible } } void testInterfaceAbstract(Object obj, Class c) { if (obj.getClass() == CharSequence.class) {} if (obj.getClass().equals(Number.class)) {} if (c == Number.class || c == CharSequence.class) { if (obj.getClass() == c) {} } } void testPrimitive(Object obj) { Class c = int.class; if (obj.getClass() == c) {} if (obj.getClass() == void.class) {} if (obj.getClass() == int[].class) {} } void testVoidType(Object obj) { if (obj.getClass() == Void.class) {} } void testIntermediateVar(Object obj) { Class c = obj.getClass(); if (c == Number.class) {} if (c == HashSet.class) { if (obj instanceof CharSequence) {} } if (obj instanceof CharSequence) { if (c == HashSet.class) {} } } void testTwoObjects(Object o1, Object o2) { if (o1 instanceof CharSequence && o2 instanceof Integer) { if (o1.getClass() == o2.getClass()) {} } if (o1.getClass() == o2.getClass()) { if (o1 instanceof String) { if(o2.getClass() == Integer.class) {} } if (o1 instanceof CharSequence) { if (o2 instanceof Integer) {} } } } void testGetSimpleName(Object obj) { if (obj.getClass() == Integer.class || obj.getClass() == Long.class) { Class cls = obj.getClass(); if (cls.getSimpleName().startsWith("X")) {} if (cls.getSimpleName().startsWith("I")) { System.out.println((Long)obj); } } } void testAnonymous() { Runnable r = new Runnable() { public void run() { if (getClass().getSimpleName().isEmpty()) {} if (getClass().getName().isEmpty()) {} if (getClass().getCanonicalName().isEmpty()) {} } }; } static final class X {} void testNested(X x) { if (x.getClass().getSimpleName().equals("X")) {} if (x.getClass().getName().equals("GetClass$X")) {} if (x.getClass().getCanonicalName().equals("GetClass.X")) {} } void testLocal() { class X {} X x = new X(); if (x.getClass().getSimpleName().equals("X")) {} if (x.getClass().getName().equals("GetClass$X")) {} if (x.getClass().getCanonicalName().equals("GetClass.X")) {} } boolean isSorted(Collection c) { Class klass = c.getClass(); return klass == SortedSet.class; } }