Going with the idea that this guy is a ResolvedEndpoint, maybe it makes sense to pass the URI *and* the corresponding list of raw addresses in the constructor -- so people aren't tempted to use this guy as some weird sort of template and mutate the URI in place, creating a shared-state mess.

Of course, one could expose an attr_reader for :uri, without inviting misuse.