Yes the idea is to avoid autoboxing, especially as this called for every single value.
The encoding implementations will implement only a subset depending on what they support.
Exposing the dictionary specific method enables the upper layers to read the dictionary ids without decoding the data. In particular the Converter will decode the strings in the dictionary only once and iterate on the dictionary ids instead of the values. All layers need to support all cases so having a subclass is not really useful here. Instead once the layers are wired together different methods will be called depending on the type and encoding of the column.