【问题标题】:How to retrive string value of Long.MAX_VALUE in compile time in java?java - 如何在Java的编译时检索Long.MAX_VALUE的字符串值?
【发布时间】:2017-04-02 10:00:11
【问题描述】:

是否有任何可能的方法来使用运行时调用方法设置常量编译时间值? 在“Spring in Action”一书中,我得到了这段代码:

private static final String MAX_LONG_AS_STRING = Long.toString(Long.MAX_VALUE);

@RequestMapping(method = RequestMethod.GET)
public List<Spittle> spittles(
        @RequestParam(value = "max", defaultValue = MAX_LONG_AS_STRING) long max,
        @RequestParam(value = "count", defaultValue = "20") int count) {
    return spittleRepository.findSpittles(max, count);
}

问题出在 MAX_LONG_AS_STRING 上,因为 defaultValue 参数需要是字符串常量,但 MAX_LONG_AS_STRING 不是常量编译时变量,有没有办法将 Long 最大值作为常量字符串值? 也许有什么东西可以帮助我在编译期间调用 toString 方法,或者以任何其他方式检索这个值?

【问题讨论】:

  • private static final String MAX_LONG_AS_STRING = "9223372036854775807"; ?
  • @bradimus 这将是解决方法。如果 java 在未来的 128 - 256 位系统中有更大的 long 怎么办?
  • @mlecz Long.MAX_VALUE 的合约指定它返回2^63-1

标签: java string spring runtime compile-time


【解决方案1】:

您可以按照以下步骤实现:

(1) 先获取最大值long MAXVALUE = Long.MAX_VALUE;

(2) 将@RequestParam的值设置为defaultValue = MAXVALUE+""(将long转换为字符串)

完整代码:

private static final long MAXVALUE = Long.MAX_VALUE;//Get the long value first

    @RequestMapping(method = RequestMethod.GET)
    public void spittles(
            @RequestParam(value = "max", defaultValue = MAXVALUE+"") long max,
            @RequestParam(value = "count", defaultValue = "20") int count) {
       // return spittleRepository.findSpittles(max, count);
    }

【讨论】:

  • 尽管我讨厌+"" 而不是toStringString.valueOf,但这里可能需要它。
  • 但是为什么“Spring in Action”可以使用MAX_LONG_AS_STRING?
  • 您可以先将值赋给MAX_LONG_AS_STRING,然后才能使用。这是可行的。私有静态最终字符串 MAX_LONG_AS_STRING = "9223372036854775807";
  • 不用给变量赋值,Long.MAX_VALUE + "" on defaultValue就够了
【解决方案2】:
private static final String MAX_LONG_AS_STRING = String.valueOf(Long.MAX_VALUE);

可以解决问题;

【讨论】:

  • 这行不通,因为 String.valueOf 也是一个运行时调用
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多