Когда точка восстановления создана, Windows начинает мониторинг тома, и любые изменения записываются в собственный файл diff внутри папки System Volume Information.
API для VSS-SDK мы можем выставить том, но он показывает нам весь том и все файлы / папки, которые были или не были изменены с момента создания снимка, и при доступе к любому файлу, скажем, он называется DVDPlayer - и я хочу, чтобы enum представлял, включен ли он, выключен или STANDBY.
Так что я могу поместить enum в класс - это не имеет смысла вне класса. У меня такой вопрос - должно ли перечисление быть публичным, чтобы другие классы могли запрашивать значения, или я должен сделать его закрытым, а затем иметь методы "isOn", "isOFf" и "isStandby"?
Последнее звучит немного глупо, но я не уверен, стоит ли публиковать enum как общедоступный.
Я бы сказал, что сделать это общедоступным кажется хорошей идеей. Основная причина в том, что приложение легче расширять, поскольку вам не придется думать о добавлении новых методов каждый раз, когда вы добавляете состояние.
Если вы решите сделать его общедоступным, вам следует подумать о том, чтобы сделать его перечислением верхнего уровня. Я действительно не понимаю, почему вы говорите "это не имеет смысла вне класса". Я думаю, что DVDPlayerState
звучит как прекрасное общедоступное/высокоуровневое перечисление.
Это зависит от того, как вы хотите использовать класс DVDPlayer
из внешнего мира:
if (dvdPlayer.getState() == State.ON)
или
if (dvdPlayer.isOn())
Я думаю, что первый вариант лучше. Вам не нужно загрязнять свой код методами делегирования.
Как правило, вы хотите, чтобы все было максимально конфиденциально (хотя обычно это не тот вариант использования с перечислениями), но, судя по тому, как поставлен ваш вопрос, я не уверен, что вы используете перечисления как предназначена.
Вы хотите использовать перечисление для представления фиксированных значений; это более чистая альтернатива сохранению этих значений в виде статических конечных целых чисел или строк. Итак, для перечисления, объявленного как
public enum DvdState { ON, OFF, STANDBY };
Ваш класс будет выглядеть примерно так:
public class DvdPlayer {
private DvdState state = DvdState.OFF;
public void setState(DvdState state) {
this.state = state;
}
}
А вызывающий класс будет использовать следующий код:
dvdPlayer.setState(DvdState.ON);
Было бы целесообразно сделать перечисление общедоступным. Тогда у вас будет что-то вроде этого:
DvdPlayer.State getState();
Если у вас есть только три состояния, может быть предпочтительнее использовать методы isOn, isOff и isStandby. Для большего количества состояний публичное перечисление лучше. Также перечисление можно использовать в операторе switch, что удобно.