Wie findet man den passenden Konstruktor raus?

Hallo

Ich habe folgenden Array

	Object[] types = new Object[3];
		types[0] = String.class;
		types[1] = Integer.class;
		types[2] = Character.class;

Und ich habe eine Klasse Auto die angenommen “nicht bekannt ist”, diese Klasse hat mehrere Konstruktoren.
Ich muss prüfen ob es ein Konstruktor gibt der zum oberen Array passt

Ich weis aber das die Klasse Auto folgenden Konstruktor besitzt

	
	public Auto(String a, int b, char c) {
	
	}
	

Wie muss ich vorgehen um zu prüfen ob es ein passenden Konstruktor gibt ?

Constructor<?>[] constructors = Auto.class.getConstructors();

Hi super danke. Das hat schon sehr geholfen. Allerdings funktioniert das bei mir nur für Komplexe Datentypen.


public Auto(Integer x){
		
	}

wird mit

			        Auto.class.getConstructor(new Class[]{ Integer.class});```
gefunden, aber wenn ich es ändere zu dem hier, dann wird er nicht mehr gefunden.

public Auto(int x){

}```

Was macht man bei primitiven Typen?

Primitive Klassen benutzen. Anstatt Integer.class, Character.class also: int.class, char.class etc.

Und verwende für Dein Types-Array anstatt Object lieber Class<?>

super cool, danke

Ich hinterfrage trotzdem noch mal : wenn du weist welche Konstruktoren die Klasse besitzt warum willst du es dann noch durch Code zur Runtime rausfinden ?

ein Matheprogramm soll für beliebige Eingaben funktionieren, und trotzdem testet man es mit konkreten Beispielwerten wie 5/0 usw.

ZickZack ist entweder selber schlau auf die Besonderheit von int-Parameter gekommen oder würde sonst im Betrieb bei Fehlern darauf stoßen, so wie Exceptions bei unbedachten /0 fliegen,

der Blick auf konkrete Fälle sagt doch nichts über die allgemeine Verarbeitung aus,
vielleicht stehen die Typen in einer Datei oder DB, Massenverarbeitung

Hmm, selbst wenn ich das auf Massenverarbeitung ausweite erschließt sich mir nicht wirklich der Sinn. Eine Klasse hat nun mal ihre fest definierten Konstruktoren und Parameter, die ändern sich ja nicht. Und mit “Object…” als VarArg-Parameter, hmm, auch irgendwie ziemlich merkwürdig.
Auch will mir das Konzept nicht recht klar werden weshalb man denn lieber mit Reflections die Konstruktoren prüfen will anstatt sauber ein Interface und entsprechende Implementierungen mit ner Factory zu nutzen. Zumindest würde ich letzteres, wenn auch selber noch nicht umgesetzt, bevorzugen.

@Sen-Mithrarin schau mal hier, dann wird es wohl klarer.

http://forum.byte-welt.net/threads/13149-Ist-das-irgendein-Design-Muster

Ist halt ein Teil seiner Übungsaufgabe.

Gut, aber wenn ich beide zusammenfüge und mir daraus “Wie baut man ne Factory?” ableite kommt es mir noch etwas merkwürdig vor warum man intern mit Reflections arbeiten sollte um wie gesagt einen passenden Konstruktor zu finden. Zumindest mit den Factories mit den ich bisher zu tun hatte war aus der Doc klar welche Parameter in welcher Reihenfolge zu übergeben sind wenn man ein bestimmtes Objekt X haben wollte. Wie das dann intern gelöst wurde, ob über Interfaces mit Settern oder direktem Konstruktor-Call, keine Ahnung, aber ich gehe von aus sicherlich nicht mit Reflections irgendwie “hinten rum”, zumindest kann ichs mir schlecht vorstellen, wenn auch proof-of-concept sicher möglich.