Вы добавляете логическое поле к списку классов, возможно, с именем allowModification . Первоначально это поле имеет значение true, но вы добавляете метод, который может называться seal () , в ваш класс, который меняет это поле на false.
И затем все ваши методы, которые могли бы изменить список, просто проверяют это поле. Если это правда, они делают то, что должны, в противном случае они могут выдать исключение, сообщающее пользователю, что изменения не разрешены для запечатанных списков.
Другим подходом может быть определение особого экземпляра класса вашего узла. И когда вызывается seal (), у вас есть последний элемент в списке, указывающий на это специальное значение вместо нуля для отметки: добавление других элементов больше не допускается. Но решение, основанное на этом флаге, менее сложное.
С учетом комментария ОП: реальное решение работает по-другому: у вас в основном есть список, который позволяет вносить изменения постоянно. И тогда у вас есть отдельный список имплантации, который нельзя изменить после его первоначального создания. Вы создаете этот список на основе другого списка, он выбирает содержащиеся в нем элементы, а затем просто отказывается от каких-либо изменений.
И нет, класс списка не может знать, помечены ли его экземпляры как окончательные!