maybe make the parent interface a java interface with package visibility? Perhaps not so nice due to the side effects it could have on other structuring of your packages. I am scratching my head on the api design though. You have a sendable that knows how to dispatch itself to the network as well as being a type of builder factory for what I think is to facilitate copy / modify. I don’t have any real context of the domain but Sendable has some smell to it. I would expect the
NetworkManager
to have a method like
send(Sendable)
and the sendable to not even know about a network manager. I would also question if every single sendable is going to want/need to be able to create a
newMultiResultBuilder
.