Czy instanceof jest uważany za złą praktykę? Jeśli tak, to w jakich okolicznościach instanceof jest nadal preferowany?
Przez lata starałem się unikać instanceof
kiedy tylko było to możliwe. Za pomocą polimorfizmu lub wzorca odwiedzającego, w stosownych przypadkach. Przypuszczam, że w niektórych sytuacjach po prostu ułatwia konserwację... Czy są jakieś inne wady, o których należy pamiętać?
Widzę go jednak tu i ówdzie w bibliotekach Javy, więc przypuszczam, że ma swoje miejsce? W jakich okolicznościach jest to korzystne? Czy jest to nieuniknione?
2 answers
Mogę sobie wyobrazić pewne przypadki, na przykład masz pewne obiekty biblioteki, których nie możesz rozszerzyć( lub byłoby to niewygodne), być może zmieszane z niektórymi obiektami Twojej, wszystkie z tą samą klasą bazową, razem w kolekcji.
Przypuszczam, że w takim przypadku użycie instanceof do rozróżnienia niektórych procesów na tych obiektach może być przydatne.
Idem w jakiejś konserwacji kodu starszego, gdzie nie można wprowadzić nowego zachowania w wielu starych klasach tylko po to, aby dodać nowy mały funkcja lub jakaś poprawka błędu...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-01 16:55:06
To zdecydowanie ma swoje miejsce w implementacji akcji equals
. Np.
public boolean equals ( Object o )
{
if ( this == o )
{
return true;
}
if ( ! (o instanceof MyClass) )
{
return false;
}
// Compare fields
...
}
Ciekawostką na temat instanceof jest to, że jej LHS może być null
i w takim przypadku wyrażenie jest ewaluowane do false
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-01 17:02:40