我们可以在运行时将值传递给注释吗?

时间:2011-10-22 09:40:52

标签: java annotations date-format

我们需要在java中创建一个名为DateFormat的注释。它将采用字符串dateformat,例如。

class  User
{
    @Dateformat("MMM/dd/yyyy")
    private Date birthDate;
}

此处,日期格式作为参数静态传递给注释。我们有什么办法可以在运行时传递这个日期格式,可能来自会话。

请帮忙。

3 个答案:

答案 0 :(得分:3)

直接,没有。

但是如果你有一个属性解析机制,你可以有类似的东西:

@DateFormat("${birth.date.format}")

解析注释时解析birth.date.format属性。

答案 1 :(得分:1)

Java Language Spec规定注释参数值必须是常量表达式。来自section 9.6

  

元素类型T仅与元素值V相当   如果满足下列条件之一:

     
      
  • T是一个数组类型E []并且:   
        
    • V是一个ElementValueArrayInitializer和每个ElementValueInitializer(类似于一个变量初始值设定项)   V中的数组初始值设定项与E.或
    • 相当   
    • V是与T.相称的ElementValue。
    •   
  •   
  • V的类型与T分配兼容(第5.2节),此外:   
        
    • 如果T是基本类型或字符串,则V是常量表达式(§15.28)。
    •   
    • V不为空。
    •   
    • 如果T是Class,或者是Class的调用,而V是类文字(第15.8.2节)。
    •   
    • 如果T是枚举类型,则V是枚举常量。
    •   
  •   

这种情况下的关键项是第二个块的第一个子点。

答案 2 :(得分:0)

没有。你能做的是有一个像

这样的注释
@DateFormat(sessionKey = "foo")

使用注释的工具/ api将提取sessionKey属性的值,并使用给定的会话属性键从会话中获取要应用的模式。