Then we would trade in the switch block for method heads. There would still be duplicate code. And the check if the prefix is even valid would be replicated as well (or there would again be another method.) or one would loose the corner case if somebody tries to convert a PropertyDocument as an ItemDocument (or vice versa) wich at the moment would result in an exception due to the mismatch between the actual and expected identifiers.