Как сделать так, чтобы метод принимал только Entity - PullRequest
1 голос
/ 29 апреля 2019

Я хотел бы создать метод, который принимает любой тип объекта 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 ???

1 Ответ

0 голосов
/ 30 апреля 2019

Короткий ответ: вы не можете сделать это. По крайней мере, не как проверка времени компиляции. T extend Entity будет работать, только если Entity будет интерфейсом или классом; в вашем случае это аннотация, которая запрещена JLS.

Единственный способ сделать это - проверка во время выполнения, что-то вроде этого:

private static void test(EntityObject entityObject) {
    Annotation [] all = entityObject.getClass().getAnnotations();
    // filter on the ones you care
}

Но это будет работать только во время выполнения , конечно.

...