Вместо CapabilityId
extension String
, CapabilityId
может включать поле String
с именем "id"; тогда ваш Map
может быть определен как Map<CapabilityId, Map<GroupId, Foo>>
, и вы можете получить доступ к отдельным полям идентификатора через getId()
в ваших ключевых классах.
Я не уверен, что сделал бы это сам, но если бы я сделал, это, вероятно, то, что я бы сделал.
Вы можете ограничить беспорядок, имея класс abstract GenericId
с полем id и методом getId()
, и CapabilityId
и GroupId
наследуют его.