我刚刚遇到了在Android中生成通知ID的问题。
我正在经历一些通知处理-sdk,他们正在使用以下代码来生成通知ID:
private int generateTimestampId() {
return (int)(new Date().getTime() % 2147483647L);
}
这可能是很好的解决方案,但我无法理解% 2147483647L
在时代背景下代表什么。
(请注意:new Date().getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数(
可以这样做以防止将long
缩小到int
时会发生负值。请考虑以下代码:
long value = 1L + Integer.MAX_VALUE; // anything past max integer
int i1 = (int) value; // -2147483648
int i2 = (int) (value % 2147483647L); // 1
使用% 2147483647L
代码可确保数字始终小于Integer.MAX_VALUE
,这是2147483647,然后才能缩小到int
。
在生成的 id 上下文中或多或少是有意义的,我们很少在此用例中使用负数。