Как выражать “никогда” java.util. Дата?

У меня есть класс с полями "deletionDate" и "experiationDate", который мог оба быть не определен, что будет означать, что объект состоит в том, имеет ли удаленный, ни дату истечения срока.

Мой первый подход был:

private Date deletionDate = null; // null means not deleted

При наличии книги "Чистый Код" в памяти я не забываю лучше использовать выразительные имена вместо комментариев. Так мои текущие решения:

private static final Date NEVER = null;
private Date deletionDate = NEVER;

Я мог пользователь класс обертки вокруг Даты, но это усложнит отображение JPA.

Что Вы думаете о нем? Как Вы никогда не выражали бы?

5
задан deamon 8 January 2010 в 11:18
поделиться

6 ответов

никогда не бывает, не 1/1/2999.

Я бы остался с твоим первым решением. Нулевая дата означает, что этого еще не случилось.

может быть, вы можете обернуть ее чем-то вроде :

boolean isNeverDeleted(){
    return deletionDate == null;
}
11
ответ дан 18 December 2019 в 11:57
поделиться

Я бы не использовал Дата , а метки времени, используя -1 для никогда и 0 для немедленного;

public static final long IMMEDIATE = 0;
public static final long NEVER = -1L;
private long expires = NEVER;

интерпретация атрибута должна быть в геттере, как:

public boolean isExpired() {

    return (NEVER == expires) ? false : (expires < System.currentTimeMillies());
}

Удаление следует тому же шаблону.

Обновление Я знаю, что 0 и -1 являются действительными метками времени, но так как истечение срока действия и удаление файлов и других ресурсов редко (никогда не говорите никогда :-)) происходит в 1970 или ранее, это полезная константа, imho.

.
-1
ответ дан 18 December 2019 в 11:57
поделиться

Вы можете думать о нулевой дате как о "недоступной" или "неприменимой". Если это так, то "NO DATE" подойдет для "никогда".

Не подтип "Дата" только для очень изысканного требования к стилю.

Лучшим вариантом является добавление семантики к объекту модели. Если у вас есть объект Thing со свойством deletionDate, вы можете сделать:

class Thing
+ deletionDate
+ isNeverDeleted: boolean { return deletionDate == null; }

и это будет практично и документально, как в классе, так и в клиентском коде:

if(myThing.isNeverDeleted())
3
ответ дан 18 December 2019 в 11:57
поделиться

Желаемый ответ:

ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection objMOC = objMC.GetInstances();

    foreach (ManagementObject objMO in objMOC)
    {
        if (!(bool)objMO["ipEnabled"])
            continue;

        Console.WriteLine((string)objMO["MACAddress"]);
    }
-121--2695379-

Пусть значение по умолчанию рассматривается как «никогда»

-121--4648628-

Я считаю null подходящим. Это ясно указывает на «не набор».

В зависимости от того, насколько сложным вы хотите получить, вы можете иметь перечисление и иметь некоторое состояние, как 'NeverExpires' в качестве 'UserState' (или что бы вы ни представляли). Это, вероятно, предпочтительнее, но может быть бесполезно сложным, в зависимости от того, что ваша система.

3
ответ дан 18 December 2019 в 11:57
поделиться

я просто выбирал бы далеко-будущую дату в качестве значения для константы НИКОГДА. Затем для проверки на удаление/истечение просто сравните с НИКОГДА.

-1
ответ дан 18 December 2019 в 11:57
поделиться

Пусть значение по умолчанию будет рассматриваться как «никогда»

0
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: