Static methods are type-bound, because at best, Number and Number do not have a valueOf method, so you are not going to work after that.
The easiest way is to just make some static methods like sloppyParseInt , sloppyParseFloat etc.
You can do something like this, not sure I like it, and probably can be improved:
public class Main { private static final Map<Class<? extends Number>, NumberConverter> CONVERTERS; static { CONVERTERS = new HashMap<>(); CONVERTERS.put(Integer.class, new IntegerConverter()); } public static void main(String[] args) { Number valueA; Number valueB; valueA = CONVERTERS.get(Integer.class).convert("42"); valueB = CONVERTERS.get(Integer.class).convert("Hello, World!"); System.out.println(valueA); System.out.println(valueB); } } interface NumberConverter<T extends Number> { T convert(String str); } class IntegerConverter implements NumberConverter<Integer> { @Override public Integer convert(String str) { try { return Integer.valueOf(str); } catch (NumberFormatException ex) { return 0; } } }
Tofubeer
source share