Yes. Most listing of tags wants the names only, so should be parse the RevTag regardless? Isn't that the opposite of what we
are trying to do elsewhere, i.e. don't do things the caller didn't ask for. An yes, you have to examine what you get so we don't have
to do unnecessary work unless you really want the information and regardless of how we design this you have to check whether is an annotated tag and what kind of object it points to etc. If you try to abstract a type you'll wind up with something very close to a Ref anyway. 

I suppose we could play we subclasses of Ref, but I doubt that will help. 

An option could be to the the command to preparse the objectId
in the ref so you could cast, but you still need to check the type before casting since it could be any type.