Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要用-1作为参数实例化日期?_Java_Datetime - Fatal编程技术网

Java 为什么要用-1作为参数实例化日期?

Java 为什么要用-1作为参数实例化日期?,java,datetime,Java,Datetime,我知道这可能是一个明显的问题,但我正在查看以下代码: private Date lastActivity = new Date(-1); 我很好奇这是怎么回事-有六个不同的构造函数,只有一个可以接受一个long参数,如下所示: public Date(long date) 其中: 分配日期对象并将其初始化以表示指定的日期 自标准基准时间(称为“基准时间”)起的毫秒数 “纪元”,即1970年1月1日00:00:00 GMT 那么-1只是一个占位符吗?我很感激任何提示或建议。人们通常会这样做,以

我知道这可能是一个明显的问题,但我正在查看以下代码:

private Date lastActivity = new Date(-1);
我很好奇这是怎么回事-有六个不同的构造函数,只有一个可以接受一个
long
参数,如下所示:

public Date(long date)
其中:

分配日期对象并将其初始化以表示指定的日期 自标准基准时间(称为“基准时间”)起的毫秒数 “纪元”,即1970年1月1日00:00:00 GMT


那么-1只是一个占位符吗?我很感激任何提示或建议。

人们通常会这样做,以获得一个“众所周知”的日期,可能用于验证或比较(所有“真实日期”都大于此日期),作为一个“标记对象”,表明该日期确实未知/非法/待定,但出于某种原因,或者可能用于单元测试,您不想使用null


好的,查找我称之为“标记值”的更合适的术语,我得到哨兵值、标志值、跳闸值、恶意值、信号值或虚拟数据。请参见现在是
1970年1月1日,格林尼治标准时间00:00:00
减去一毫秒(负数是纪元开始后的日期)

那么-1只是一个占位符吗?我很感激任何提示或建议

可能不是在通常使用术语占位符的意义上。(这是代表……或为……其他事物占有一席之地的事物。)

它更可能是一个值,用于表示计算中的边界条件。在这种特殊情况下,变量名
lastActivity
似乎暗示了这一点。我可以想象,这是确定“活动”最晚时间的算法的一部分。。。并且
日期(-1)
对象将被视为表示“活动从未发生”。他们还可以使用
null
或标志来表示此。。。但是使用“时髦”的日期对象可能会稍微简化算法的逻辑

“哨兵值”是一个很好的术语。。。但“标记值”并不好,因为它实际上并没有标记任何东西

(从某种意义上说,
-1
的选择是任意的。它可以是任何值…只要它不对应于算法可能遇到的时间点。如果时间点总是在UNIX纪元之后…1970年1月1日,则使用
-1
是理想的。但是如果它可能必须处理历史数据是的,那么可能
Long.MIN\u VALUE
会更好。无论哪种方式……这在你的家庭作业中都可能是毫无意义的。)

这称为a。其要点通常是表示数据不可用、一系列数据已结束等。通过使用特定的、明显无效的值,您可以省去维护单独的
isValid
isFinished
字段的工作量


对于这是否是一个好的实践,意见不一。当这个约定非常广为人知时,比如在终止C字符串的ASCII
\0
中,它通常被接受。在其他情况下,您可能会在将来扩大被认为是“有效”的范围,然后您将在n处理遗留数据。这也违反了单一责任原则:这段数据可以代表两条完全不同的信息,这会损害可维护性,因为代码读取器可能没有意识到隐藏的潜在特殊含义,而类型系统也无法帮助您发现它。

您能做到吗?I figured如果您试图将
Date
对象设置为无效值,则该对象将引发异常。[根据设计],我猜。@Adel是的,这是一个虚假的日期,但却是一个“众所周知的”虚假日期。:-)在许多示例中,您使用-1作为计数或索引以指示“未找到”。(例如String.indexOf())。在那个例子中,-1是一个众所周知的假位置。@RobertHarvey,这不是一个无效值。现在是1969年12月31日23:59:59:9999 GMT
日期(长)
构造函数不拒绝任何值。为什么
新日期(-1)
是一个“假”日期?根据它的实现方式,这也可能意味着1970-01-01 00:00:00之前的1毫秒。@Wormbo好的,从技术上来说,“伪”这个词可能太强了。但由于代码硬编码为-1,除非有明确的注释表明这意味着特定的日期,否则我会假设它是一个标记/“假”日期。最近的一次活动不太可能发生在1969年,除非是关于在新年亲吻你的高中恋人。(在伦敦!)是的,但你认为最后一次活动真的有可能发生吗?不,这几乎肯定是一个标记对象。