#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: Constructorconstructor = 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);
Комментариев нет:
Отправить комментарий