Есть способ сделать то, что вы хотите, без итерации по каждому объекту.
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ : это грязный, смешной и довольно сложный способ. Если реализовано, вы должны получить доступ к своему значению selected
только через isSelected()
(что является общим требованием инкапсуляции).
Вы должны действительно повторить это, но я даю вам «решение» ради эксперимента.
Теперь, когда я сначала поставил отказ от ответственности:
Создать объект «Переключатель», который вы можете дать всем им, класс должно выглядеть следующим образом:
class Switch {
private boolean switchedOff = false;
private LocalDateTime lastSwitchOff;
public boolean isSwitchedOff() {
return switchedOff;
}
public void switchOff() {
switchedOff = true;
lastSwitchOff = LocalDateTime.now();
}
public LocalDateTime getLastSwitchOff() {
return lastSwitchOff;
}
}
Как только ваш переключатель переключен, все вызовы isSelected()
вашего объекта Tag
вернут false, если вы не установите их снова. Вот как вы добавляете его в свой Tag
класс:
public class Tag {
private final String title;
private final String id;
private boolean selected;
private Switch theSwitch;
private LocalDateTime lastModified;
public boolean isSelected() {
if (theSwitch != null && theSwitch.isSwitchedOff() && lastModified.isBefore(theSwitch.getLastSwitchOff())) return false;
else return selected;
}
public void setSelected(boolean selected) {
lastModified = LocalDateTime.now();
this.selected = selected;
}
public Tag(String id, String title, boolean selected, Switch theSwitch) {
lastModified = LocalDateTime.now();
this.id = id;
this.title = title;
this.selected = selected;
this.theSwitch = theSwitch;
}
...
}
И затем вы можете использовать его следующим образом:
public static void main(String[] args) {
Switch mySwitch = new Switch();
List<Tag> brandList = new ArrayList<>();
brandList.add(new Tag("1", "A", false, mySwitch));
brandList.add(new Tag("2", "v", true, mySwitch));
brandList.add(new Tag("3", "f", false, mySwitch));
brandList.add(new Tag("4", "g", true, mySwitch));
brandList.add(new Tag("5", "y", true, mySwitch));
brandList.add(new Tag("18", "y", true, mySwitch));
brandList.add(new Tag("16", "j", true, mySwitch));
brandList.add(new Tag("19", "m", false, mySwitch));
mySwitch.switchOff();
// Now all of the isSelected() calls will return false
}
Хорошо я сделал это сам. Шаги, которые я выполнил, были: 1. Удалите каждый По необходимости продукт на моей машине. 2. Перезагрузка. 3. Установка P4V. 4. Перезагрузка. 5. Insteall P4Win. 6. Перезагрузка.
Затем Представление Таймлапса (и График Пересмотра, другой полезный инструмент, который можно только получить от инструментов P4V) обнаруживается в P4Win. Ура!
По тому, как я пытался удалить их всех, затем переустанавливая в правильном порядке БЕЗ любого из тех шагов перезагрузки... провал. Вероятно, не все те шаги перезагрузки необходимы, но я хотел быть уверенным, и это работало.
Я хотел бы занять это место для высказывания еще раз: P4V является экскрементами осла и По необходимости должен прекратить пытаться пихнуть его вниз наши горла и продолжить основываться на фантастическом продукте, который они имеют в P4Win. kthxbye.
Этот метод также работает для 64-разрядной версии Windows 7 с 64-разрядными версиями P4V и P4Win