我正在编写一个以Class实例作为参数的函数。我想获得在类上定义的特定注释的值。 分类:
@AllArgConstructor
@MyAnnotation(tableName = "MyTable")
public class MyClass {
String field1;
}
想要检索注释值的函数。
public class AnnotationValueGetter{
public String getTableName-1(Class reflectClass){
if(reflectClass.getAnnotation(MyAnnotation.class)!=null){
return reflectClass.getAnnotation(MyAnnotation.class).tableName();
//This does not work. I am not allowed to do .tableName(). Java compilation error
}
}
public String getTableName-2{
Class reflectClass = MyClass.class;
return reflectClass.getAnnotation(MyAnnotation.class).tableName()
//This works fine.`enter code here`
}
}
MyAnnotation:
@DynamoDB
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
public @interface MyAnnotation {
/**
* The name of the table to use for this class.
*/
String tableName();
}
函数getTableName-1显示编译错误,而getTableName-2工作得很好。我在这做错了什么?我想实现类似于getTableName-1的函数。
答案 0 :(得分:0)
使用具有泛型类型参数的类:
public String getTableName-1(Class<?> reflectClass){
//Your code here.
}
还有一个建议,
最好使用reflectClass.isAnnotationPresent(MyAnnotation.class)
代替reflectClass.getAnnotation(MyAnnotation.class)!=null
作为if块中的条件。
答案 1 :(得分:0)
您可以通过这种方式访问这些值:
public class AnnotationValueGetter {
public String getTableName1(Class reflectClass) {
if (reflectClass.isAnnotationPresent(MyAnnotation.class)) {
Annotation a = reflectClass.getAnnotation(MyAnnotation.class);
MyAnnotation annotation = (MyAnnotation) a;
return annotation.tableName();
}
return "not found";
}
}