> so it needs to be be final

Of course - doh! In that case, we could do something like this:
```
public ZoneToEndpointNegotiateVersion(..., @ApiVersion String apiVersion, ...) {
  String versionPrefix = apiVersion.startsWith("v") ? "" : "v"; // or write using if...else, if preferred
  this.apiVersion = versionPrefix + apiVersion;
}
```
We shouldn't have to worry about hiding if we use `this.apiVersion` to refer to the field elsewhere in the constructor. I agree, though, that that could be confusing. In which case, how about calling the parameter "apiVersion" and the field something like "apiVersionWithPrefix" or so, or call the parameter "rawApiVersion" and the field "apiVersion", to indicate that there's actually something different about the two?