Use Enum::toString to print but Enum#valueOf(Enum::name) to match
CaryCatZ opened this issue · 2 comments
The formatter uses Enum::toString
to print.
But parse uses Enum::name
to match.
So, you might type X
but it says it's invalid but also X
is an allowed value in the help.
This may happen when toString
method was overrode.
For example:
The enumeration is:
public enum Resolution {
R_4K, // could not start with a number
R_1080P,
R_720P;
@Override
public String toString() { // for human-reading
return this.name().substring(2)
}
}
The help may be like this:
...
-res
Possible Values: [4K, 1080P, 720P]
...
So, the user might type -res 4K
java -jar program.jar -res 4K
But the program gave this unthinkable report:
Invalid value for -res parameter. Allowed values: [4K, 1080P, 720P]
@CaryCatZ Thank you for reporting this issue. While it is arguable whether it is a good idea to provide a user-friendly name here (see https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html#toString-- which says that this is intended to be the declared name of the constant), I think this is simply a bug. So I would kindly encourage you to provide a PR containing a fix and a unit test proving its effect.
Thanks for considering this issue and the PR will be provided soon.