Мне нужен метод, который возвращает экземпляр предоставленного типа класса. Предположим, что предоставленные типы ограничены таким образом, что их можно создать «пустым» экземпляром. Например, предоставление String.class
вернет пустую строку, предоставление Integer.class
вернет целое число, начальное значение которого равно нулю, и так далее. Но как мне создавать (в штучной упаковке) примитивные типы на лету? Как это?
public Object newInstance(Class<?> type) {
if (!type.isPrimitive()) {
return type.newInstance(); // plus appropriate exception handling
} else {
// Now what?
if (type.equals(Integer.class) || type.equals(int.class)) {
return new Integer(0);
}
if (type.equals(Long.class) // etc....
}
}
Является ли единственным решением для перебора всех возможных типов примитивов, или есть более простое решение? Обратите внимание, что оба
int.class.newInstance()
и
Integer.class.newInstance()
бросить InstantiationException
(потому что у них нет нулевых конструкторов).