Подтвердить что ты не робот

Зачем вам создавать экземпляр Date с -1 в качестве аргумента?

Я знаю, что это может быть очевидный вопрос, но я смотрю на этот код:

private Date lastActivity = new Date(-1);

И любопытно, что это делает - Класс даты имеет шесть разных конструкторов, и только один может принять один аргумент long, вот так:

public Date(long date)

который:

Выделяет объект Date и инициализирует его для представления указанного количество миллисекунд с момента стандартного базового времени, известного как "эпохи", а именно 1 января 1970 года, 00:00:00 по Гринвичу.

Итак, -1 - это местозаполнитель? Я ценю любые советы или советы.

4b9b3361

Ответ 1

Итак, -1 - это местозаполнитель? Я ценю любые советы или советы.

Вероятно, не в том смысле, что термин placeholder обычно используется. (Это то, что стоит... или занимает место для... чего-то другого.)

Скорее всего, это значение, представляющее граничное условие для целей вычисления. В этом конкретном случае это имя имеет название переменной lastActivity. Я бы предположил, что это часть какого-то алгоритма для определения последнего времени "активности"... и что объект Date(-1) будет восприниматься как означающий "активность никогда не происходила". Они также могли бы использовать null или флаг для представления этого... но использование "фанкового" объекта Date, возможно, немного упростило логику алгоритма.

"Дозорное значение" является хорошим термином для этого... но "значение маркера" не так хорошо, потому что оно на самом деле ничего не маркирует.

(В некотором смысле выбор -1 произволен. Это может быть любое значение... при условии, что оно не соответствует моменту времени, который может быть встречен алгоритмом. Использование -1 является идеальным если точки времени всегда будут после эпохи UNIX... 1 января 1970 года. Но если это потенциально должно иметь дело с историческими датами, то, может быть, Long.MIN_VALUE было бы лучше. В любом случае... это вполне вероятно быть спорным в контексте вашей домашней работы.)

Ответ 2

это January 1, 1970, 00:00:00 GMT минус одна миллисекунда (отрицательные числа - это даты в начале начала эпохи)

Ответ 3

Как правило, это делается для получения "хорошо известной" даты, возможно, для проверки или сравнения (все "реальные даты" больше, чем эта), как "объект-маркер", чтобы указать, что дата действительно неизвестна/незаконным/ожидающим, но вы не хотите использовать null по какой-либо причине или, возможно, для Unit Test.

O.K., просматривая более правильные термины для того, что я назвал "значением маркера", получаю дозорное значение, значение флага, значение отключения, значение изгоя, значение сигнала или фиктивные данные. см. статью в Википедии

Ответ 4

Это называется значение часового. Точка, как правило, указывает на то, что данные недоступны, что серия данных подошла к концу и т.д. Используя определенное, явно недопустимое значение, вы сохраняете усилия по поддержанию отдельного isValid или isFinished.

Мнения различаются по поводу того, является ли это хорошей практикой. Когда соглашение очень хорошо известно, как в ASCII \0, который завершает строку C, это общепринято. В других случаях часто существует вероятность того, что вы можете расширить диапазон того, что считается "действительным" в будущем, и тогда вы будете привязаны к работе с устаревшими данными. Это также нарушает принцип единой ответственности: эта часть данных может представлять две довольно разные части информации, что ущемляет ремонтопригодность, поскольку считыватель кода может не знать о скрытом потенциальном специальном значении, а система типов не помогает вам обнаружить ее.