NumberFormat.parse(String source)
возвращает Number
. Тип времени выполнения возвращаемого экземпляра может быть любым подклассом Number
, поэтому, если он возвращает Long
, вы не можете привести его к Double
, как вы узнали.
Если вы хотите задать числовой тип, в который будут преобразованы String
s, вы можете передать синтаксический анализатор Function
методу:
static <T extends Number> T[] parseBulk(String bulk, Class<T> type, Function<String,T> parser) {
String[] elements = bulk.split(";");
T[] result = (T[])Array.newInstance(type, elements.length);
for (int i= 0; i< elements.length; i++) {
result[i] = parser.apply(elements[i]);
}
return result;
}
И назовите его, например, с помощью:
Double[] shouldBeDoubles = parseBulk("15.5;10", Double.class,Double::valueOf);
Будет выведено:
[15.5, 10.0]