Bonjour,
Un constructeur ne doit pas avoir de type de retour, sinon c'est une méthode normale.
Donc ceci est faux :
public class Paire {
public void Paire(String val1, String val2) {
}
public void Paire() {
}
}
Il faut enlever les void :
public class Paire {
public Paire(String val1, String val2) {
}
public Paire() {
}
}
Mais sinon ton code fonctionne, il te manque quand même les affichages de o et o2 pour vérifier que ça marche.
Toutefois ton code est un peu compliqué, voici comment le simplifier.
public static void main(String[] args) {
try {
Paire p = Paire.class.newInstance();
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
try {
Paire p = Paire.class.getConstructor(String.class, String.class).newInstance("valeur1", "valeur2");
System.out.println(p);
} catch (Exception e) {
e.printStackTrace();
}
}
Remarque : en Java 8 on peut faire des références de méthode avec les constructeurs ce qui donne une autre manière de faire de l'instanciation d'objet, plus efficace qu'avec la réflexion.
public static void main(String[] args) {
// import java.util.function.Supplier;
Paire p1 = ((Supplier<Paire>) Paire::new).get();
System.out.println(p1);
// import java.util.function.BiFunction;
Paire p2 = ((BiFunction<String, String, Paire>) Paire::new).apply("valeur1", "valeur2");
System.out.println(p2);
}