Короткий ответ - нет.
Ваша проблема в том, что List<MyEntity>
определяет список MyEntity или его подклассов (то есть, если у нас есть @interface AnotherEntity extends MyEntity
, тогда мы могли бы поместить AnotherEntity
в этот список).
Класс MyClass
не расширяет / не реализует MyEntity
, он аннотирован им.
Даже если бы это было возможно, это было бы неэффективно.Вы не знаете, какие методы или поля доступны, MyEntity
не описывает интерфейс вашего объекта.Таким образом, единственное, что может быть использовано для фильтрации неправильных вставок.Вы можете легко реализовать это, предоставив реализацию List:
List<?> myEntities = new LinkedList<?> {
@Override
public boolean add(Object obj) {
if (obj != null && obj.getClass().isAnnotationPresent(MyEntity.class)) {
return super.add(obj);
}
throw new IllegalArgumentException("Only objects annotated with MyEntity are allowed");
}
@Override
public boolean addAll(Collection<?> objs) {
//something similar, maybe with Collections2.filter from Google Collections
}
};