当前位置: 首页 > 知识库问答 >
问题:

在注释中使用属性值?[副本]

宗政权
2023-03-14

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

问题:我可以代替String"TP_REPORT"使用一些属性
,其值在编译时未知,但仅在运行时未知吗?

@PhoenixTable(tableName="TP_REPORT")
public class TPData {
    ...
}

作为参考,这里是我的注释类型的定义。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface PhoenixTable {

    public String tableName();

}

共有2个答案

楚天宇
2023-03-14

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

返回类型仅限于前面类型的基元、字符串、类、枚举、注释和数组。

但是如果您绝对需要一些动态的东西,您可以给出一个类并使用该类从某个属性文件中读取。虽然这可能不是您的最佳解决方案,但它可能会为您提供一些需要研究的东西。

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 {
    ...
}
莫逸仙
2023-03-14

不。这在Java中是不可能的。注释中的值应在编译时保持不变。

 类似资料:
  • 我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?

  • 我想根据“配置文件”设置注释的值。 让我举个例子来解释; 在上面的例子中,我们可以看到活动的“配置文件”是PROD,但是假设我们想要使用DEV配置文件,我们将不得不注释来自PROD的@Table注释,并取消注释DEV@Table注释。 如果这只针对一个实体,那不会是一个问题,但我有很多实体都有这种情况,所以我不认为这是处理这种即兴“简介”的方式。 你知道有什么办法可以解决这种情况吗?

  • 我最近开始使用带有Page对象模式的Selenium2和Page Factory。我使用@FindBy注释声明了WebElements,这些注释在初始化类时由PageFactory初始化。但是,我希望将@findby注释与locators.properties文件一起使用。不幸的是,我似乎无法做到这一点,因为注释被限制为只允许常量表达式。一般来说,这似乎是Java注释的一个限制,但我只是想知道是否

  • 例如,我有一个bean类 我想设置这个属性的值。 在Xml配置中,我可以 我如何实现同样的事情,即设置属性的值使用Java注释?现在我已经读到,我们可以使用@Value注释使用一些属性文件,但它不能不使用属性文件,做的方式,我通过xml文件?或者使用属性文件是必要的? 我可以通过包含

  • 我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现