web-dev-qa-db-fra.com

Comment créer une instance d'une classe avec les paramètres dans le constructeur en utilisant la réflexion?

par exemple:

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;}
}

code clair.

Mais, si j'ajoute un constructeur avec des paramètres, certains comme ceci:

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

Je vois: Java.lang.InstantiationException

Donc, non, je ne sais pas, comment passer constructeur avec params.

S'il vous plaît, aidez.

39
user471011

Vous devez dire quel constructeur vous souhaitez utiliser un argument pass it.

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

Si vous manipulez des super/sous-classes, ou pour une raison quelconque, vous ne savez pas exactement quelle classe doit être instanciée, la méthode forName () sera également requise:

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

Cela suppose que name_of_the_class est une variable transmise. De plus, si la classe est dans un package, même si ce package a été importé, vous devez toujours stipuler explicitement le package dans forName () (je pense que je suis nouveau dans tout cela).

Class.forName([name_of_package].[name_of_class])
7
C Dawson