我用反射API创建的注释即使有数据也会返回null



所以我用反射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)

不知道具体是怎么回事,但它确实工作得很开心

最新更新