Мне нужно выключить много разных реализованных потоков, которые имеют только один общий интерфейс Shutdown
. Я не хочу передавать какую-либо глобальную коллекцию по всему коду и добавлять новые созданные потоки вручную, потому что она где-то будет забыта и, следовательно, является ошибкой hazzard.Зарегистрируйте все экземпляры интерфейса в каком-либо глобальном контейнере
Есть ли опрятный способ, может быть, через трюки с отражением, чтобы захватить все экземпляры какого-либо интерфейса? Или есть альтернативный способ заставить вновь созданные потоки регистрироваться в коллекции? Я могу только думать о том, чтобы использовать какой-то супер-конструктор, а затем передать эту ссылку, но это крайне плохой стиль.
Эта задача подобна протоколированию, некоторым метафайлам, которые не должны жить на том же уровне, что и остальная бизнес-логика.
Существует ли стандартный шаблон регистрации выключения или какая-либо передовая практика?
P.S. Все фрагменты кода можно редактировать.
ли все реализации части вашего проекта или, возможно, они приходят из других банок во время выполнения? – Affe
Детали из нескольких проектов, но я могу редактировать их все, поэтому это может быть и один проект. –