【问题标题】:Constant meaning in javajava中的常量含义
【发布时间】:2021-01-07 10:14:43
【问题描述】:

目前,我正在开发一个 spring-boot 应用程序,其余控制器之一如下所示:

@RequestMapping(value = VALUE)
public class SomeControllerClass {

  public final static String VALUE = UUID.randomUUID().toString();
  
  ...

}

在开发时,我在为@RequestMapping 设置 VALUE 时遇到了这个问题

属性值必须是常量

但是,如果我更改静态字段分配,如下所示,一切正常:

public final static String VALUE = "someValue";

现在,我想知道以下之间有什么区别(就java常量含义而言):

public final static String VALUE = "someValue";

和 public final static String VALUE = UUID.randomUUID().toString()

【问题讨论】:

  • 嗯,你需要的是一个编译时间常数,UUID.randomUUID().toString() 显然不能满足这个要求。
  • 它必须是编译时常量,而不是运行时常量。
  • 您的值可能是可变的,不符合最终静态值的要求..
  • @AbdulKayuem 怎么可能改变? VALUE 是一个final 字段
  • 注解值必须是一个编译时常量。您使用多个方法调用来初始化该字段,这些方法调用可以(在您的情况下)在每次初始化类时产生不同的值。这不适用于注释,因为它们的值是在编译时确定的,而不是在运行时确定的。

标签: java spring compiler-errors static constants


【解决方案1】:

我认为常量的正式定义是 Java 语言规范中的第 15.29 节(常量表达式):

https://docs.oracle.com/javase/specs/jls/se15/html/jls-15.html#jls-15.29

因此,对于字符串常量,它是文字字符串和任何使用其他常量字符串变量的简单表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2013-02-13
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多