Có cách nào có thể để thiết lập giá trị thời gian biên dịch không đổi bằng cách sử dụng phương thức gọi thời gian chạy không? Trong "Mùa xuân trong hành động" cuốn sách, tôi nhận được đoạn mã này:Cách lấy lại giá trị chuỗi Dài.MAX_VALUE trong thời gian biên dịch trong java?
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);
}
vấn đề là với MAX_LONG_AS_STRING, vì defaultValue param cần phải là một chuỗi liên tục nhưng MAX_LONG_AS_STRING không phải là một biến thời gian biên dịch không đổi, là có bất kỳ cách nào có thể để có được giá trị tối đa dài như một giá trị chuỗi không đổi? Có thể có điều gì đó có thể giúp tôi gọi phương thức toString trong thời gian biên dịch hoặc lấy giá trị này theo bất kỳ cách nào khác?
'chuỗi kết thúc tĩnh riêng tư MAX_LONG_AS_STRING =" 9223372036854775807 ";'? – bradimus
@ bradimus điều này sẽ là giải pháp. Điều gì sẽ xảy ra nếu java sẽ có thời gian dài hơn trong các hệ thống 128 - 256 bit trong tương lai? – mlecz
@mlecz Hợp đồng cho ['Long.MAX_VALUE'] (https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#MAX_VALUE) xác định rằng nó trả về' 2^63 -1'. – bradimus