Ответ 1
Вы просто ищете
if (annotation.annotationType().equals(javax.validation.Valid.class)){}
?
Я использую отражение, чтобы увидеть, является ли аннотация, прикрепленная к свойству класса, определенного типа. То, что я делаю:
if("javax.validation.Valid".equals(annotation.annotationType().getName())) {
...
}
Который поражает меня как маленький kludgey, потому что он полагается на строку, которая является полностью квалифицированным именем класса. Если пространство имен изменится в будущем, это может привести к незначительным ошибкам.
Я хотел бы сделать:
if(Class.forName(annotation.annotationType().getName()).isInstance(
new javax.validation.Valid()
)) {
...
}
Но javax.validation.Valid
является абстрактным классом и не может быть инстанцирован. Есть ли способ имитировать instanceof
(или в основном использовать isInstance
) для интерфейса или абстрактного класса?
Вы просто ищете
if (annotation.annotationType().equals(javax.validation.Valid.class)){}
?
Или даже проще:
if (annotation instanceof Valid) { /* ... */ }
Только для полноты, другая возможность
if (this.getClass().isAnnotationPresent(MyCustomAnnotation.class)) {
Хорошо, наверное, я должен был сделать немного больше исследований, прежде чем публиковать вопрос. Я обнаружил, что могу использовать Class.isAssignableFrom(Class<?> cls)
:
import javax.validation.Valid;
if(Valid.class.isAssignableFrom(annotation.annotationType())) {
...
}
Это, похоже, выполняет эту работу. Я не уверен, есть ли какие-либо оговорки в использовании этого подхода.
Поскольку аннотация является просто классом, вы можете просто использовать == compare:
if (annotation.annotationType() == Valid.class) { /* ... */ }