我的一个项目中有这个带注释的课程。
注释类是由我定义的。
问题:我可以代替字符串"TP_REPORT"
使用某些属性吗?
在编译时不知道其值,而在运行时才知道?
@PhoenixTable(tableName="TP_REPORT")
public class TPData {
...
}
仅供参考,这是我的注释类型的定义。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PhoenixTable {
public String tableName();
}
答案 0 :(得分:2)
不。在Java
中是不可能的。注释中的值在编译时应该是恒定的。
答案 1 :(得分:0)
由于在声明注释时没有任何对象,因此您无法提供任何对象引用。摘自Oracle(click here)的文档:
返回类型仅限于基元,字符串,类,枚举, 批注以及上述类型的数组。
但是,如果您绝对需要动态的东西,可以给一个类并使用该类从某些属性文件中读取。尽管这可能不是您的最佳解决方案,但它可能会给您一些调查的机会。
public interface TableNameProp{
public static String getTableName(){
return "TP_REPORT"; //or read from some prop and use it
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PhoenixTable {
public Class<TableNameProp> tableProps();
}
@PhoenixTable(tableProps=TableNameProp.class)
public class TPData {
...
}