Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

Создание объекта класса описаного в массиве из Class<?>

#java #ооп #generics


Можно ли в Java 8 создать объект от класса Class?

Что-то вроде :

Number n = new Float.class;

    


Ответы

Ответ 1



Да, можно. Существуют два метода для этого: Constructor.newInstance() и Class.newInstance(). Первый предпочтительней, так как: Class.newInstance() может вызывать только конструктор без аргументов, а Constructor.newInstance() может вызывать как конструктор с аргументами, так и без них. Если конструктор выбросит исключение, то метод Class.newInstance() пробросит его дальше, независимо от того, проверяемое оно или нет. Метод Constructor.newInstance() обёртывает любое исключение в InvocationTargetException. С помощью метода Class.newInstance() не получится создать объект с приватным конструктором, а с помощью метода Constructor.newInstance() в некоторых случаях может получиться. Таким образом, если бы у класса Float был бы конструктор без аргументов, то можно было бы использовать второй метод: // работает только для классов с конструктором без аргументов Float instance = Float.class.newInstance(); Но у Float нет конструктора без аргументов, поэтому используем первый метод. Получить экземпляр класса Constructor можно с помощью метода getConstructor, который принимает классы параметров конструктора. Например, у Float есть конструктор, принимающий double: Constructor constructor = Float.class.getConstructor(double.class); Float instance = constructor.newInstance(7.77);

Ответ 2



Class cls = Float.class; Constructor constructor = cls.getConstructor(Double.TYPE); Number instance = (Number) constructor.newInstance(3.14);

Комментариев нет:

Отправить комментарий