Я работаю с JPA 2 и имею следующий метод:Java - прохождение класса с аннотацией к родовой методе
private static void wipeTable(EntityManager em, Class<? extends Table> klass) {
String tableName = klass.getAnnotation(Table.class).name();
...
}
Я думаю, что есть проблема с параметром Class<? extends Table>
. У меня есть класс сущностей, как так:
@Entity
@Table(name = "collections")
public class Collection extends MyOtherClass implements Serializable { ... }
я могу сделать Collection.class.getAnnotation(Table.class).name()
просто отлично, так что я хочу, чтобы иметь возможность передавать Collection
в качестве параметра. Просто позвонив wipeTable(em, Collection.class);
имеет следующую ошибку, хотя:
Метод wipeTable (EntityManager, класс < расширяет таблицу >?) В типе FetchData не применим для аргументов (EntityManager, класс < Коллекция >)
Я пытался просто с параметром быть Class klass
, без дженериков:
private static void wipeTable(EntityManager em, Class klass) {
String tableName = ((Table)klass.getAnnotation(Table.class)).name();
Это привело к тому, что моя IDE предложила:
Класс нестандартного типа. Ссылки на общий тип Класс должен быть параметризован
Я использую Java 1.5. Есть ли способ сказать «дать мне параметр типа Class
, который аннотируется @Table
»?
вы не можете просто использовать список
ответ
Я понимаю, чего вы пытаетесь выполнить, но поймите, что Collection не расширяет таблицу, на ней есть аннотация для таблицы. Измените подпись на что-то вроде этого:
Что касается второго пункта, нет никакого способа, проходя ваш параметр Class поместить ограничение на нее, чтобы иметь определенную аннотацию. Но вы можете проверка на наличие аннотаций в вашем методе:
источник
2012-01-11 20:49:16 Perception
Спасибо. Поскольку невозможно ограничить параметры класса аннотацией, есть ли смысл иметь класс Class klass', а не 'Class klass', за исключением того, что IDE не ворчит? –
Это было бы правильно. Предполагая, что вы не делаете дополнительной логики, требующей знания общего типа, тогда общий параметр должен только сделать компилятор счастливым. – Perception
Стоит отметить, что вам не нужно вводить параметр типа для сигнатуры метода, если вы просто используете 'Class >' как тип параметра. – megaflop
Смежные вопросы