我知道这可能是一个显而易见的问题,但我正在看这段代码:
private Date lastActivity = new Date(-1);
我很好奇这是做什么的 - Date class有六个不同的构造函数,只有一个可以采用long
的单个参数,如下所示:
public Date(long date)
其中:
分配Date对象并初始化它以表示指定的对象 自标准基准时间以来称为“。”的毫秒数 时代“,即1970年1月1日,格林尼治标准时间00:00:00。
所以-1只是一个占位符?我感谢任何提示或建议。
答案 0 :(得分:19)
January 1, 1970, 00:00:00 GMT
减去一毫秒 (负数是纪元开头后面的日期)
答案 1 :(得分:17)
通常会这样做以获得“众所周知的”日期,可能用于验证或比较(所有“真实日期”都大于此),作为“标记对象”以指示日期真的未知/非法/待定,但您不希望出于某种原因使用null,或者可能是单元测试。
O.K。,查找我称之为“标记值”的更合适的术语,我得到了标记值,标记值,跳闸值,流氓值,信号值或虚拟数据。见wikipedia article here
答案 2 :(得分:5)
所以-1只是一个占位符?我感谢任何提示或建议。
可能不是通常使用术语占位符。 (这是代表......或者为......别的东西占有一席之地。)
更有可能是表示计算目的的边界条件的值。在这种特殊情况下,变量名lastActivity
似乎暗示了这一点。我认为这是确定“活动”的最新时间的某种算法的一部分......并且Date(-1)
对象将被视为“活动从未发生过”。他们也可以使用null
或一个标志来表示这个......但是使用“时髦”Date对象可能会稍微简化算法的逻辑。
“哨兵价值”是一个很好的术语......但“标记值”不太好,因为它实际上没有标记任何东西。
(从某种意义上说,-1
的选择是任意的。它可以是任何值......只要它与算法可能遇到的时间点不对应。使用{{1如果时间点总是在UNIX时代之后...... 1970年1月1日,那么这是理想的。但如果它可能需要处理历史日期,那么-1
可能会更好。无论哪种方式。 ......在你的家庭作业中,这很可能没有实际意义。)
答案 3 :(得分:4)
这称为sentinel value。其重点通常是指示数据不可用,一系列数据已经结束等。通过使用特定的,显然无效的值,您可以节省维护单独的isValid
或isFinished
字段。
关于这是否是良好做法的意见不同。当约定非常有名时,如在终止C字符串的ASCII \0
中,它通常被接受。在其他情况下,您可能会扩展未来被视为“有效”的范围,然后在处理遗留数据时您将陷入困境。它还违反了单一责任原则:这条数据可以代表两条相当不同的信息,这会损害可维护性,因为代码阅读器可能不会意识到隐藏的潜在特殊含义,而类型系统无法帮助您发现它