@Override public T convert(String arg) { try { return Enum.valueOf(enumClass(), arg.toUpperCase().replaceAll("-", "_")); } catch (IllegalArgumentException e) { EnumSet<T> values = EnumSet.allOf(enumClass()); Set<String> validValues = new HashSet<>(); for (T value : values) { validValues.add(friendlyName(value)); } throw new ParameterException("Invalid value for " + getOptionName() + " parameter. Allowed values:" + validValues); } }