所以我用反射API从头开始构建ORM Manager,一切都很好,但我创建了一个注释@Table
,它不想正常工作。所以注释看起来像这个
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {
String value() default "";
}
我正在我的模型类上使用它,所以
@Entity
@Table(value = "Books")
public class Book {
现在我正试图把这个值作为一个参数来传递,就像这个
@Override
void register(Class... entityClasses) throws SQLException {
for (Class entityClass : entityClasses) {
if (entityClass.isAnnotationPresent(Entity.class)) {
String tableName;
if (entityClass.isAnnotationPresent(Table.class)) {
tableName = entityClass.getClass().getDeclaredAnnotation(Table.class).value();
} else {
tableName = entityClass.getSimpleName();
}
不要介意@Entity
注释,它工作得很好。唯一的问题是@Table
注释总是返回null,所以它抛出NullPointerException
并崩溃。
哪里有问题,我该怎么解决。我已经实现了@Column
注释,当我在@Column
注释上使用.value()
时,它工作得很好,所以不知道为什么它不适用于@Table
@编辑
所以我刚刚发现不是Value
返回null而是.getAnnotation
,但仍然不知道它为什么返回null
Cannot invoke "teamblue.annotations.Table.value()"
because the return value of "java.lang.Class.getAnnotation(java.lang.Class)" is null
问题是foreach循环,我必须像一样在其中传递泛型类型
for (Class<?> entityClass : entityClasses)
不知道具体是怎么回事,但它确实工作得很开心