1. 程式人生 > >instanceof判斷物件型別

instanceof判斷物件型別

package bean;

/** 一般可能我們在使用java的RTTI技術時,都使用instanceof來判斷一個物件是不是屬於某個類,
 * 但是有時候這個類是繼承於一個父類的,所以,不能嚴格判斷出是不是自己的類,而不是自己的父類。
 * 這個時候就使用另一種思路也是不錯的——getClass判斷;當然肯定還有其他的方法來判斷的,只是自己的總結。
 */
public class tets {
	public static void main(String arg[]) {
		ClassA a = new ClassA();
		ClassB b = new ClassB();
		ClassC c = new ClassC();
		sayClass(a);
		sayClass(b);
		sayClass(c);
		System.out.println("---------------------------------");
		equalClass(a);
		equalClass(b);
		equalClass(c);
	}

	public static void sayClass(Object o) {
		if (o instanceof ClassA) {
			System.out.println("ClassA");
		} else if (o instanceof ClassB) {
			System.out.println("ClassB");
		} else if (o instanceof ClassC) {
			System.out.println("ClassC");
		}
	}

	public static void equalClass(Object o) {
		// if(o.getClass().equals(ClassA.class)){
		// System.out.println(o.getClass().getName());
		// }else if(o.getClass().equals(ClassB.class)){
		// System.out.println(o.getClass().getName());
		// }else if(o.getClass().equals(ClassC.class)){
		// System.out.println(o.getClass().getName());
		// }
		//
		if (o.getClass() == ClassA.class) {
			System.out.println(o.getClass().getName());
		} else if (o.getClass() == ClassB.class) {
			System.out.println(o.getClass().getName());
		} else if (o.getClass() == ClassC.class) {
			System.out.println(o.getClass().getName());
		}
	}
}

class ClassA {
	ClassA() {
	};
}

class ClassB {
	ClassB() {
	};
}

class ClassC extends ClassA {
	ClassC() {
	};
}