【问题标题】:String.format() as a constant expressionString.format() 作为常量表达式
【发布时间】:2019-05-21 23:43:40
【问题描述】:

有什么方法可以让我将下面的表达式计算为常量表达式?如果有帮助,我正在使用 Java 11。

String.format("hello %1$s","world");

【问题讨论】:

  • 你的意思是你想让字符串“hello world”被当作一个常量对待吗?它不是一个常数,它在运行时被插值。
  • @DaveNewton 我想在编译时实现这个功能(并且不绑定到 String.format api)。我知道实现这一点的一种方法是 String x = "world";字符串 y = "你好" + x; ...这里 y 是一个常数,尽管它使用了一个变量。我不想使用这种方法,因为我有很多变量要替换并且希望有不同的解决方案。
  • 你要解决的终极问题是什么?
  • 目前没有,但请参阅openjdk.java.net/jeps/348 了解这方面的潜在改进。

标签: java string.format


【解决方案1】:

不,编译器不能将其视为编译时常量表达式(另见this question)。

为了说明:使用字节码操作,可以修改 String.format() 的行为,例如使用 PowerMock 和类似库进行单元测试的可能性。在这种情况下,String.format("hello %1$s","world") 可能会返回“hello world”以外的其他内容。

注意: 我假设您的意思是“编译时常量表达式”。 (否则,您可以只定义一个变量final foo = String.format(...),而变量 foo 在下面的代码中将是一个常量)。但是这样的常数不能例如用作注释值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多