A
Andreas Leitgeb
Let's assume, some non native English speaker writes up
a library, that's really useful and gaining broader use.
Now, the author may have once caught up some misspelling
of a common word (like e.g. thinking that "first" was
spelled "furst" and that with a confidence level ways
above "I'd better look this up").
Eventually this misspelling goes into an enum constant,
and by the time the first user reports it, the library
is already too much in use to lightheartedly apply
Plan "A" (namely fixing the typo and thereby inducing a
compatibility issue)
Now, Plan B could be to rename the enum constant, but add
a public static field by the old bad name (initialized
with the reference to the spelling-corrected field), to
alleviate the compatibility issue at least for those who
merely used the enum's field's name in their code.
// public enum Foo { FURST, SECOND }
public enum Foo { FIRST, SECOND; public static final FURST = FIRST; }
Any user having done a switch over that enum will still
need to modify his code. Ditto anyone doing string comparisons
on foo.name(), but that is most probably a bad idea, anyway.
I'd further denote "Just leave the typo in" as "Plan *Z*",
and ask for better strategies. (at least better than Plan Z)
PS: I vaguely remember that even Sun Java had some typos in its
API, but that predated enums, so adding a second constant with
same value but corrected name was a triviality back then...
PPS: a similar problem could arise with misspelled class names,
but that's not currently in my focus.
a library, that's really useful and gaining broader use.
Now, the author may have once caught up some misspelling
of a common word (like e.g. thinking that "first" was
spelled "furst" and that with a confidence level ways
above "I'd better look this up").
Eventually this misspelling goes into an enum constant,
and by the time the first user reports it, the library
is already too much in use to lightheartedly apply
Plan "A" (namely fixing the typo and thereby inducing a
compatibility issue)
Now, Plan B could be to rename the enum constant, but add
a public static field by the old bad name (initialized
with the reference to the spelling-corrected field), to
alleviate the compatibility issue at least for those who
merely used the enum's field's name in their code.
// public enum Foo { FURST, SECOND }
public enum Foo { FIRST, SECOND; public static final FURST = FIRST; }
Any user having done a switch over that enum will still
need to modify his code. Ditto anyone doing string comparisons
on foo.name(), but that is most probably a bad idea, anyway.
I'd further denote "Just leave the typo in" as "Plan *Z*",
and ask for better strategies. (at least better than Plan Z)
PS: I vaguely remember that even Sun Java had some typos in its
API, but that predated enums, so adding a second constant with
same value but corrected name was a triviality back then...
PPS: a similar problem could arise with misspelled class names,
but that's not currently in my focus.