Java 在注释中使用属性值?

Java 在注释中使用属性值?,java,Java,我在我的一个项目中有这个带注释的类。 注释类由我定义 问题:我可以使用一些属性来代替字符串“TP\u REPORT”吗 其值在编译时未知,但仅在运行时才知道 @PhoenixTable(tableName=“TP_报告”) 公共类TPData{ ... } 这里是注释类型的定义,仅供参考 @Retention(RetentionPolicy.RUNTIME) @目标(ElementType.TYPE) 公共@interface PhoenixTable{ 公共字符串tableName(); }

我在我的一个项目中有这个带注释的类。
注释类由我定义

问题:我可以使用一些属性来代替字符串
“TP\u REPORT”

其值在编译时未知,但仅在运行时才知道

@PhoenixTable(tableName=“TP_报告”)
公共类TPData{
...
}
这里是注释类型的定义,仅供参考

@Retention(RetentionPolicy.RUNTIME)
@目标(ElementType.TYPE)
公共@interface PhoenixTable{
公共字符串tableName();
}

否。这在
Java
中是不可能的。注释中的值在编译时应该是常量。

否。这在
Java
中是不可能的。注释中的值在编译时应该是常量。

您不能提供任何对象引用,因为在声明注释时您没有任何对象。从Oracle提供的文档():

返回类型仅限于原语、字符串、类、枚举、, 注释和前面类型的数组

但是,如果您确实需要动态的东西,您可以提供一个类并使用该类来读取某些属性文件。虽然这对你来说可能不是最好的解决方案,但它可能会给你一些需要调查的东西

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 {
    ...
}
公共接口TableNameProp{
公共静态字符串getTableName(){
返回“TP_REPORT”;//或从某个道具读取并使用它
}
}
@保留(RetentionPolicy.RUNTIME)
@目标(ElementType.TYPE)
公共@interface PhoenixTable{
公共类tableProps();
}
@PhoenixTable(tableProps=TableNameProp.class)
公共类TPData{
...
}

由于在声明批注时没有任何对象,因此不能提供任何对象引用。从Oracle提供的文档():

返回类型仅限于原语、字符串、类、枚举、, 注释和前面类型的数组

但是,如果您确实需要动态的东西,您可以提供一个类并使用该类来读取某些属性文件。虽然这对你来说可能不是最好的解决方案,但它可能会给你一些需要调查的东西

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 {
    ...
}
公共接口TableNameProp{
公共静态字符串getTableName(){
返回“TP_REPORT”;//或从某个道具读取并使用它
}
}
@保留(RetentionPolicy.RUNTIME)
@目标(ElementType.TYPE)
公共@interface PhoenixTable{
公共类tableProps();
}
@PhoenixTable(tableProps=TableNameProp.class)
公共类TPData{
...
}

谢谢。你能给我指一些官方的参考资料吗?谢谢。你能给我指一些官方的参考资料吗?