2016-11-18 39 views
6

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?

+0

'chuỗi kết thúc tĩnh riêng tư MAX_LONG_AS_STRING =" 9223372036854775807 ";'? – bradimus

+0

@ 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

+0

@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

Trả lời

5

Bạn có thể đạt được điều này như thể hiện trong các bước dưới đây:

(1) Lấy giá trị Max đầu tiên long MAXVALUE = Long.MAX_VALUE;

(2) Thiết lập giá trị @RequestParam như defaultValue = MAXVALUE+"" (chuyển đổi dài để string)

Code Complete:

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); 
    } 
+1

Nhiều như tôi ghét '+" "' thay vì 'toString' hoặc' String.valueOf', nó có thể cần thiết ở đây. – bradimus

+0

có, tôi đồng ý với bạn – developer

+0

Nhưng tại sao "Mùa xuân trong Hành động" có thể ues MAX_LONG_AS_STRING? – Kassadin

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

có thể thực hiện thủ thuật;

+0

điều này sẽ không hoạt động vì String.valueOf cũng là một cuộc gọi thời gian chạy – krkonop

Các vấn đề liên quan