Хорошо, это немного сложно распаковать.
В левой части (слева) выражения >=
мы имеем:
new Date().getTime() - targetDate
Тип этого выражения — long
, поскольку targetDate
объявлен как long
.
На правой стороне мы имеем:
threshold * 24 * 60 * 60 * 1000
Это int
, потому что все операнды int
s.
Однако это выражение вероятно переполнится. Значение 24 * 60 * 60 * 1000
является "довольно большим", и когда вы умножаете его на threshold
, результирующее значение может оказаться слишком большим, чтобы его можно было представить как int
. Если он совершит переполнение, то результат будет усечен, и тест >=
даст неверный результат.
Итак... компилятор предлагает вам выполнить вычисление RHS, используя арифметику long
. Простым способом было бы объявить threshold
как long
. Но вы также можете привести его к long
, например:
((long) threshold) * 24 * 60 * 60 * 1000
что вы вводите в
threshold
?Потому что ваш
targetDate
- этоlong
?Я использую эту функцию в двух местах и передаю ей 10 и 1 соответственно в качестве порогового значения.
Обратите внимание, что вашим кодом будет намного проще управлять (и этот метод будет ненужным), если вы будете использовать современные классы
java.time
.