Im重寫equals()方法,我需要知道對象是否是Event的子類的實例(Event是超類)。我想要像「obj subclassof Event」這樣的東西。這怎麼做?Java - 是否有像「instanceof」這樣的「子類」?
在此先感謝!
Im重寫equals()方法,我需要知道對象是否是Event的子類的實例(Event是超類)。我想要像「obj subclassof Event」這樣的東西。這怎麼做?Java - 是否有像「instanceof」這樣的「子類」?
在此先感謝!
instanceof
可以處理,就好了。
是的,'如果(mysubclass instanceof事件)//堅果..' – Paolo 2010-04-23 15:28:10
好東西,你甚至不必檢查'null' – 2010-04-23 15:46:51
如果obj是Event的子類,那麼它是一個instanceof。 obj是它從中派生出來的每個類/接口的一個實例。所以至少所有對象都是Object的實例。
在Java中沒有直接的方法來檢查子類。 instanceof Event
將對象
的,你可以在對象上做getClass()
然後使用上Class
對象getSuperclass()
的方法來檢查,如果超類是Event
返回回真正的任何子類。
隨着未來代碼,你可以檢查的對象是擴展事件,但不是AB Event類實例本身的類。
if(myObject instanceof Event && myObject.getClass() != Event.class) {
// then I'm an instance of a subclass of Event, but not Event itself
}
默認instanceof
檢查如果一個對象是指定的類或子類(延伸或工具)在事件的任何水平的。
猜猜我們有同樣的想法,但你先到這裏。 – 2010-04-23 15:39:29
爲什麼要感謝您的主席:-) 另一種方法是製作事件摘要或接口,而不用費心去檢查您的對象是否是它的一個實例,因爲它不可以。 – Adrian 2010-04-23 15:43:25
真的instanceof
應該是不夠好,但如果你想,以確保該類確實是一個子類,那麼你能提供的檢查是這樣的:
if (object instanceof Event && object.getClass() != Event.class) {
// is a sub-class only
}
由於阿德里安有點超過我的,我還會添加一種方法,你可以用通用的方法做到這一點。
public static boolean isSubClassOnly(Class clazz, Object o) {
return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz;
}
使用此方式:
if (isSubClassOnly(Event.class, object)) {
// Sub-class only
}
也許也有... && clazz!= null && ...爲了完整性? :D – Paggas 2010-04-25 22:06:30
@Paggas:我會認爲這是一個編程錯誤,因此想要產生NullPointerException。基本上不可能有'object instanceof null',所以爲什麼要允許'isSubClassOnly(null,object)'。 – 2010-04-26 15:36:31
出了什麼問題'instanceof'造成你問這個問題?請張貼您的嘗試,期望和意外的一些代碼。 – BalusC 2010-04-23 15:29:51