Подтвердить что ты не робот

Как создать экземпляр класса с параметрами в конструкторе с использованием отражения?

например:

public class Test {

    public static void main(String[] args) throws Exception {
        Car c= (Car) Class.forName("Car").newInstance();
        System.out.println(c.getName());
    }
}

class Car {
    String name = "Default Car";
    String getName(){return this.name;}
}

очистить код.

Но, если я добавляю конструктор с параметрами, некоторые вроде этого:

public Car(String name)
{this.name = name;}

Я вижу: java.lang.InstantiationException

Итак, нет, я не знаю, как пропустить конструктор с параметрами.

Пожалуйста, помогите.

4b9b3361

Ответ 1

Вам нужно сказать, какой конструктор вы хотите использовать для передачи аргументов.

Car c = Car.class.getConstructor(String.class).newInstance("Lightning McQueen");

Ответ 2

Если вы обрабатываете супер/подклассы или по какой-либо причине не знаете точно, какой класс должен быть создан, вам также понадобится метод forName():

(ClassName) Class.forName([name_of_the_class])
      .getConstructor([Type]).newInstance([Constructor Argument]);

Это предполагает, что name_of_the_class является переданной переменной. Кроме того, если класс находится в пакете, даже если этот пакет был импортирован, вам все равно необходимо явно указать пакет в forName() (я думаю, я новичок во всем этом).

Class.forName([name_of_package].[name_of_class])