Używam refleksji, aby sprawdzić, czy adnotacja dołączona do właściwości klasy jest określonego typu. Aktualny robie:Sprawdzanie, czy adnotacja jest określonego typu
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
Które wydaje mi się trochę kludgey ponieważ opiera się na sznurku, który jest w pełni kwalifikowana nazwa-klasy. Jeśli przestrzeń nazw zmieni się w przyszłości, może to spowodować subtelne błędy.
chciałbym zrobić:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
Ale javax.validation.Valid
jest klasą abstrakcyjną i nie może być instancja. Czy istnieje sposób na symulowanie instanceof
(lub zasadniczo używać isInstance
) przeciwko interfejsowi lub klasie abstrakcyjnej?
Jest to rodzaj przesady, ponieważ i tak nie wolno rozszerzać adnotacji. Nie wiem, czy jest jakaś istotna kara za wydajność w porównaniu do zwykłych równych. – Affe
@Affe Widziałem twoje rozwiązanie - nie wiedziałem, że możesz po prostu zrobić '.equals' lub' == 'na' .class'! Dziękuję za to. Miałem wrażenie, że użycie '.class' po prostu porównuje obiekty' Class', a nie rzeczywiste typy. –
Klasa jest w rzeczywistości singleton. Gwarantuje się, że istnieje tylko jedno wystąpienie obiektu klasy dla danego typu dla każdego programu ładującego klasy, więc można je porównać w ten sposób w java. – Affe