讓我們假設我們有一個方法接受Object類型的兩個參數o1和o2並返回一個布爾值。我想這個方法只有當參數是同一類的實例,如返回true:我怎樣才能找出兩個參數是否是相同的,但未知的類的實例?
foo(new Integer(4),new Integer(5));
應該返回true,但是:
foo(new SomeClass(), new SubtypeSomeClass());
應該返回false,也:
foo(new Integer(3),"zoo");
應該返回false。
我相信一個方法是比較完整的類名:
public boolean foo(Object o1, Object o2){
Class<? extends Object> c1 = o1.getClass();
Class<? extends Object> c2 = o2.getClass();
if(c1.getName().equals(c2.getName()){ return true;}
return false;
}
另一種條件語句應該是:
if (c1.isAssignableFrom(c2) && c2.isAssignableFrom(c1)){ return true; }
後者的選擇是相當緩慢的。這個問題還有其他的選擇嗎?
謝謝你回答我的問題喬恩... – Ingmar 2010-04-17 15:12:11