2016-11-18 60 views
6

Çalışma zamanı çağrı yöntemini kullanarak sabit derleme zamanı değerini ayarlamak için herhangi bir yol var mı? "Bahar Action" kitabında , ben bu kod parçası var: defaultValue param sabit bir dize olması gerekir ama MAX_LONG_AS_STRING sabit derleme zamanı değişken olmadığı içinJava'da derleme zamanında Long.MAX_VALUE dize değeri nasıl geri alınır?

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

sorun, MAX_LONG_AS_STRING ile, orada Sabit bir String değeri olarak Uzun maksimum değer elde etmek için herhangi bir yol? Belki derleme zamanı sırasında toString yöntemini çağırmamda veya bu değeri başka bir şekilde almam için bana yardımcı olabilecek bir şey var mı? Aşağıdaki adımlarda gösterildiği gibi

+0

'özel statik son Dize MAX_LONG_AS_STRING =" 9223372036854775807 ";'? – bradimus

+0

@bradimus bu geçici bir çözüm olurdu. Ya java gelecekte 128 - 256 bit sistemlerde daha uzun olacaksa? – mlecz

+0

@mlecz ['Long.MAX_VALUE'] sözleşmesi (https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#MAX_VALUE), '2^63 döndürdüğünü belirtir. -1'. – bradimus

cevap

5

Bunu elde edebilirsiniz:

(1) ilk Maksimum değer elde edin long MAXVALUE = Long.MAX_VALUE;

(2) defaultValue = MAXVALUE+"" (dizeye uzun dönüştürür) olarak @RequestParam değeri ayarlayın

Komple Kod:

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

"toString" veya "String.valueOf" yerine "+" "ifadesinden nefret ettiğim kadarıyla, burada gerekli olabilir. – bradimus

+0

evet, size katılıyorum – developer

+0

Ama neden "Bahar Eylem" MAX_LONG_AS_STRING ues olabilir? – Kassadin

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

hile yapabilir;

+0

bu işe yaramaz, çünkü String.valueOf ayrıca bir çalışma zamanı çağrısıdır – krkonop