import java.util.*;
class GetClass {
native void unknown();
private Class myCls;
void testSimple(Class extends Number> 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;
}
}