2

我尝试在 servlet 中使用注释 @MultipartConfig(location=Test.MY_CONST)。

当我使用下面的代码 1时,它工作得很好。当我使用下面的代码 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. 代码 1代码 2之间有什么区别?
  2. 我收到这个错误是因为@MultipartConfig 需要一个编译时间常数,并且MY_CONST在静态初始化程序中分配一个编译时间常数不会产生MY_CONST一个编译时间常数吗?
  3. 在代码 2System.out.println(Test.MY_CONST)的情况下,如果我使用反射更改 的值,会打印什么?MY_CONST
4

1 回答 1

1

您不能更改“最终”变量。不能更改“常量”变量。它也被直接初始化。

于 2013-07-25T13:06:23.777 回答