append a # seems reasonable to me – given your argument should we rename metrics2 and hfilev2 as well?
I can't speak to metrics as I don't know well enough what changed from the first implementation to the second. Not so on the HFile because that's a different serialization format. Having versioning there is acceptable, I think, though were it a public API I would argue for managing API changes as we do with other public APIs. Even that is done relatively well, given the presence of AbstractHFileReader, etc.
In this case, we're talking about a public API which itself has not changed (a blanket copy-paste, right?), only the detail of which class is instantiated in the template. That's not a serialization format change and it's not a significant API change (though it is one). As I said, there's no way for us to work around this in Java, so I guess that's that.