Nadpisuję metodę equals() i muszę wiedzieć, czy obiekt jest instancją podklasy Event (Event jest nadklasą). Chcę coś takiego jak "obj subclassof Event". Jak można to zrobić?Java - czy istnieje "podklasa" podobna do instanceof?
Z góry dziękuję!
Nadpisuję metodę equals() i muszę wiedzieć, czy obiekt jest instancją podklasy Event (Event jest nadklasą). Chcę coś takiego jak "obj subclassof Event". Jak można to zrobić?Java - czy istnieje "podklasa" podobna do instanceof?
Z góry dziękuję!
instanceof
poradzi sobie z tym dobrze.
Tak, 'if (instancja mysubclass Event) // idą nuts..' – Paolo
Dobrze, że nawet nie musisz sprawdzać' null'a –
Jeśli obiekt jest podklasą zdarzenia, to jest instancją. obj jest instancją każdej klasy/interfejsu, z którego pochodzi. Przynajmniej wszystkie obiekty są instancjami Obiektu.
W Javie nie ma bezpośredniej metody sprawdzania podklasy. instanceof Event
wróci z powrotem prawdziwe dla dowolnej klasy sub obiektów
można zrobić getClass()
na obiekcie, a następnie użyć getSuperclass()
sposób na Class
obiektu, aby sprawdzić czy jest Event
nadklasą.
Możecie zajrzeć do someObject.getClass().isAssignableFrom(otherObject.getClass());
Jest to przydatne tylko wtedy, gdy masz tylko informacje o klasie. Ale w 'equals()' masz obie ** instancji ** do twojej dostępności. – BalusC
Tak, masz rację. Użyłem słowa "moc" z jakiegoś powodu. na przykład Pisanie metody wielokrotnego użytku "equalsHelper", która wykonuje wstępne testy dla ciebie. Prawidłowe informacje zostały już opublikowane, więc chciałem tylko dodać inne uwagi. – z5h
do następnego kodu można sprawdzić, czy obiekt jest klasa, która rozciąga się zdarzenie, ale nie jest sama instancja klasy Event AB.
if(myObject instanceof Event && myObject.getClass() != Event.class) {
// then I'm an instance of a subclass of Event, but not Event itself
}
Przez domyślny instanceof
sprawdzenia czy dany przedmiot jest z określonej klasy lub podklasy (rozszerza lub narzędzia) na każdym poziomie imprezy.
Zgadnij, że mieliśmy ten sam pomysł, ale dostałeś się tutaj pierwszy. –
Po co dziękuję panu :-) Innym sposobem na zrobienie tego jest stworzenie abstrakcyjnego wydarzenia lub interfejsu, a nie sprawdzanie, czy obiekt jest konkretnie jego instancją, ponieważ tak nie jest. – Adrian
Naprawdę instanceof
powinno być wystarczająco dobre, ale jeśli chcesz mieć pewność, że klasa jest naprawdę podklasa wtedy można zapewnić sprawdzić ten sposób:
if (object instanceof Event && object.getClass() != Event.class) {
// is a sub-class only
}
Ponieważ Adrian był trochę przede mną Dodam też sposób, w jaki można to zrobić za pomocą metody ogólnego przeznaczenia.
public static boolean isSubClassOnly(Class clazz, Object o) {
return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz;
}
Użyj tego przez:
if (isSubClassOnly(Event.class, object)) {
// Sub-class only
}
Może również masz ... && clazz! = Null && ... tylko dla kompletności? : D – Paggas
@Paggas: Uważam, że błąd programowania, a więc chcą mieć wyjątek NullPointerException. Zasadniczo nie można mieć 'obiektu instanceof null' więc po prostu pozwól' isSubClassOnly (null, object) '. –
Co z 'instanceof' który spowodował na to pytanie? Opublikuj kod za pomocą prób, oczekiwań i nieoczekiwanych sytuacji. – BalusC