Я хотел бы создать метод, который принимает любой тип объекта javax.persistence.Entity.
Я попробовал это.
Общий метод
import javax.persistence.Entity;
public <T extend Entity> void GenericMethod(T entity) {...}
Сущность, используемая для теста
@Entity
public class EntityObject {...}
Тест
GenericMethod(new EntityObject());
У меня ошибка при компиляции. Метод GenericMethod(T) в типе... неприменим для аргументов (EntityObject).
Как вы ограничиваете метод, чтобы принимать объект только с аннотацией @Entity???





Короткий ответ: это делает ты не можешь. По крайней мере, не как проверка времени компиляции. T extend Entity будет работать, только если Entity будет интерфейсом или классом; в вашем случае это аннотация, и это запрещено JLS.
Единственный способ сделать это - выполнить проверку во время выполнения, что-то вроде этого:
private static void test(EntityObject entityObject) {
Annotation [] all = entityObject.getClass().getAnnotations();
// filter on the ones you care
}
Но это будет работать только во время выполнения, конечно.
Серьезно Oracle не думал умно, когда дело доходит до сущности. Я имею в виду, что очевидно, что некоторые разработчики хотят хорошо выполнять свою работу и принудительно передавать в метод только Entity. Также сложно получить список имен столбцов от объекта. Это должно быть встроено с MyEntity.getColumnNames(), и мы сделали, серьезно, оракул, какой позор.