У меня есть класс с полями "deletionDate" и "experiationDate", который мог оба быть не определен, что будет означать, что объект состоит в том, имеет ли удаленный, ни дату истечения срока.
Мой первый подход был:
private Date deletionDate = null; // null means not deleted
При наличии книги "Чистый Код" в памяти я не забываю лучше использовать выразительные имена вместо комментариев. Так мои текущие решения:
private static final Date NEVER = null;
private Date deletionDate = NEVER;
Я мог пользователь класс обертки вокруг Даты, но это усложнит отображение JPA.
Что Вы думаете о нем? Как Вы никогда не выражали бы?
никогда не бывает, не 1/1/2999.
Я бы остался с твоим первым решением. Нулевая дата означает, что этого еще не случилось.
может быть, вы можете обернуть ее чем-то вроде :
boolean isNeverDeleted(){
return deletionDate == null;
}
Я бы не использовал Дата
, а метки времени, используя -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.
.Вы можете думать о нулевой дате как о "недоступной" или "неприменимой". Если это так, то "NO DATE" подойдет для "никогда".
Не подтип "Дата" только для очень изысканного требования к стилю.
Лучшим вариантом является добавление семантики к объекту модели. Если у вас есть объект Thing со свойством deletionDate, вы можете сделать:
class Thing
+ deletionDate
+ isNeverDeleted: boolean { return deletionDate == null; }
и это будет практично и документально, как в классе, так и в клиентском коде:
if(myThing.isNeverDeleted())
Желаемый ответ:
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' (или что бы вы ни представляли). Это, вероятно, предпочтительнее, но может быть бесполезно сложным, в зависимости от того, что ваша система.
я просто выбирал бы далеко-будущую дату в качестве значения для константы НИКОГДА. Затем для проверки на удаление/истечение просто сравните с НИКОГДА.
Пусть значение по умолчанию будет рассматриваться как «никогда»