【发布时间】:2013-07-25 09:12:39
【问题描述】:
我尝试在 servlet 中使用注释 @MultipartConfig(location=Test.MY_CONST)。
当我从下面使用 Code 1 时,它工作得很好。当我从下面使用 Code 2 时,编译时会得到以下输出:
错误:属性值必须是常量
@MultipartConfig(location=Test.MY_CONST)
代码 1
public class Test {
public static final String MY_CONST = "/constant/path";
}
代码 2
public class Test {
public static final String MY_CONST;
static {
MY_CONST = "/constant/path";
}
}
问题: 我有几个问题可以归结为“这是怎么回事?”
- 代码 1 和 代码 2 之间有什么区别?
- 我收到这个错误是因为@MultipartConfig 需要一个编译时间常数,并且在静态初始化程序中为
MY_CONST分配一个编译时间常数不会使MY_CONST成为一个编译时间常数吗?李> - 如果我用反射改变
MY_CONST的值,如果是代码2,System.out.println(Test.MY_CONST)会打印什么?
【问题讨论】:
-
如果它是在静态块中初始化的,你可能有一个
if或其他根据一些内部/外部属性改变它的值的语句。那么这不是一个常数。
标签: java constants static-variables static-initialization