Reflection

twomoon

Mitglied
Hallo zusammen,
ich habe neu angefangen mit Java-reflection zu lernen.
ich erzeuge eine Reihe von Parameter und ich möchte eine Konstruktor mit disen Paramtern innerhalb meiner Quellcode aufrufen und prüfen ob der Konstruktor mit diese Parametern aufrufbar ist.
ich habe folgende Methode:
Java:
/* argList : liste von Parametern, die ich an dem Konst eingeben will */
public Boolean checkInstanceToAvailable(Class<?> c,Constructor<?> ctor,List<Object> argList) {

	Boolean aufrufbar = false;
        Class<?>[] param_type = ctor.getParameterTypes();
	ctor.setAccessible(true);
        try {
	ctor.newInstance(/* ich möcte die Parameter hier eingeben können  */);
         aufrufbar = true;
	}catch(Exception e) {
        
         	
	return aufrufbar;
	}

Könnte jemand jemand mir helfen, wie ich das machen kann?

danke für die Hilfe
Grüße
 

frankyv

Mitglied
Wie wäre es hier mit ? :)


Java:
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;


public class TwoMoon {

	public static boolean isAvailable(Class<?> cl, List<Object> args){
		//getConstructor() erwartet die Argumente in einem Array aus Klassen:
                Class arrayArgs[] = new Class[args.size()];
		boolean available = true;
		
		for (int i = 0; i < arrayArgs.length; i++){
			arrayArgs[i] = args.get(i).getClass();
		}
		
		try {
			Constructor cons = cl.getConstructor(arrayArgs);
		}
		catch (Exception e) {
			available = false;
		}
		
		return available;
		
		
	}
	
	public static void main(String[] args) {
		List<Object> liste = new ArrayList<Object>();
		
		liste.add("TestString");
		
		if (isAvailable(String.class, liste)){
			System.out.println("Konstruktor gefunden");
		}
		else {
			System.out.println("Kein Konstruktor gefunden");
		}
		
		liste.clear();
		liste.add(5);
		
		if (isAvailable(String.class, liste)){
			System.out.println("Konstruktor gefunden");
		}
		else {
			System.out.println("Kein Konstruktor gefunden");
		}

		
	}
	
}
 

twomoon

Mitglied
Hallo frankyv,
Danke für die Antwort.
Das sieht schon gut aus.
soweit ich davon verstehe, ruftst du den Konstruktor mit der Parametertypen. ich möchte aber mit parameter selbst aufrufen.
z.B. ich habe durch reflection den Konstruktor und dessen Parametertypen bekommen. Dann erzeuge ich die Parameter für entsprechende Typen.
Nachdem ich die Parameter erzeugt habe, möchte ich mit diesen Parametern über prüfen ob mit diesen Parametern ein Objekt erzeugt werden kann.
sagen wir eine parametertype war int und ich habe eine -11234 Zahl generiert, obwohl der Konstruktor keine minus Zahlen akzeptiert.

Grüße
TwoMoon
 

Basti4231

Bekanntes Mitglied
Der Konstruktor akzeptiert alle Variablen des festgelegten Typs, egal welchen Wert sie haben.
Von daher hast du also eine Überprüfung in deinem Konstruktor. Wieso benutzt du nicht diese, um dann den entsprechenden Vorgang einzuleiten?
 

frankyv

Mitglied
@twomoon

du hast geschrieben:

sagen wir eine parametertype war int und ich habe eine -11234 Zahl generiert, obwohl der Konstruktor keine minus Zahlen akzeptiert.

so etwas kann man im Konstruktor in Java nicht ausdrücken.
Sagen wir, innerhalb des Konstruktors fände eine Überprüfung statt, z.B. ob ein Parameter
negativ war. Dann ist das innerhalb des Reflection-Frameworks nicht sichtbar, denn der kennt
nur die Schnittstelle, die Argumente, die der Methode übergeben werden, aber nicht die
interne Implementation.

Natürlich wäre es gut wenn das anders wäre.
In anderen Programmiersprachen gibt es sogenannte Verträge. Darin wird dann zugesichert, welche
Bedingungen an die Parameter gestellt werden.

Ich glaub ich kann dir da nicht weiterhelfen, aber ich wünsch dir alles Gute für dein Projekt.

Grüße...
 

frankyv

Mitglied
Ich hab nochmal drüber nachgedacht, auch über das was Basti4231 geschrieben hat.
Ich glaube, er hat recht mit dem.
Mit meiner Methode kannst du herausfinden, ob der Konstruktor prinzipiell bestimmte Parameter
akzeptiert.
Danach kannst du ja den Konstruktor mit newInstance und deinen konkreten Parametern aufrufen.
Wird dann eine Exception geworfen, oder null zurückgegeben, weisst du ja automatisch, dass
was schief gelaufen ist.
 

frankyv

Mitglied
Schau mal How do I create an object via its multiparameter constructor using reflection? - Web Tutorials - avajava.com an.

Da wirst du finden, dass man Constructor.newInstance() mit einem Array aus Objekten aufrufen kann.
Benutze also dieselbe Methode, die ich in isAvailable() benutzt habe, um die Objektliste in ein Array zu packen.

Das Array übergib dann an .newInstance().
Wenn Exception geworfen wird, dann weisst du, dass der Konstruktoraufruf ungültig war.

Wenn du dabei noch eine Hilfestellung gebrauchen kannst.
Sag einfach bescheid.

Grüße
 
Zuletzt bearbeitet:

twomoon

Mitglied
Hallo,
@Basti4231
--> ich nehme an, dass in dem Konstruktor so eine Überprüfung stattfindet.

@frankyv
--> ich habe so gemacht aber es wird so ein Exception geworfen
Exceptionmessage:Error beim Instanziierung paht.to.myTestClasses.MatrikelNr.<init>(java.lang.Integer)

Java:
	public static boolean isAvailable(Class<?> cl, List<Object> args, StringBuffer prefix) {
		// getConstructor() erwartet die Argumente in einem Array aus Klassen:
		Class arrayArgs[] = new Class[args.size()];
		Object arrayParams[] = new Object[args.size()];
		boolean available = true;
		
		for (int i = 0; i < arrayArgs.length; i++) {
			arrayArgs[i] = args.get(i).getClass();
			arrayParams[i] = args.get(i);
		}
	
		try {
		
			Constructor<?> cons = cl.getConstructor(arrayArgs);
			cons.newInstance(arrayParams);
		} catch (Exception e) {
			System.out.println("Error beim Instanziierung "+e.getMessage());
			available = false;
		}

		return available;

	}

danke euch :noe:
 

frankyv

Mitglied
Probier doch noch mal ob es jetzt funktioniert :noe:


Java:
public static boolean isAvailable(Class<?> cl, List<Object> args){
		Class arrayArgs[] = new Class[args.size()];
		Object arrayObjects[] = new Object[args.size()];
		Object result = null;
		
		boolean available = true;
		
		for (int i = 0; i < arrayArgs.length; i++){
			if (args.get(i) instanceof Integer){
				arrayArgs[i] = Integer.TYPE;
			}
			else if (args.get(i) instanceof Double){
				arrayArgs[i] = Double.TYPE;
			}
			else if (args.get(i) instanceof Float){
				arrayArgs[i] = Float.TYPE;
			}
			else if (args.get(i) instanceof Boolean){
				arrayArgs[i] = Boolean.TYPE;
			}
			else {
				arrayArgs[i] = args.get(i).getClass();
			}
		}
		
		for (int i = 0; i < arrayObjects.length; i++){
			arrayObjects[i] = args.get(i);
		}
		
		try {
			Constructor cons = cl.getConstructor(arrayArgs);
			result = cons.newInstance(arrayObjects);
			
		}
		catch (Exception e) {
			
			available = false;
		}
		
		if (result == null) available = false;
		return available;
		
		
	}
 

twomoon

Mitglied
Hey danke dir :toll: Meister :applaus:
es funktioniert wurderbar. wenn ich in dem Konstruktor beschränke, dass nur die minus Zahlnen sonst exception dann wird false zurück gegeben.
Das ist auf jeden Fall super. Aber ich muss noch erweitern weil ich die Pramtetern generiere, können viele unterschiedliche Prameterntype sein.
z.B. ein Paramter kann ein objekt sein.
 

frankyv

Mitglied
Schön, dass ich dir weiterhelfen konnte.
Ich hoffe sehr, dass du weiterhin gut vorankommst.

Und wenn du nochmal Hilfe von mir brauchen kannst, dann PN mich einfach;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Reflection gone wrong? Allgemeine Java-Themen 21
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Reflection - Abprüfen von Klasseneigenschaften Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
J Reflection-Method Hook? Allgemeine Java-Themen 14
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
X public Getter ersetzen (Reflection?!) Allgemeine Java-Themen 3
A Reflection Problem Allgemeine Java-Themen 15
K Generic class und Reflection Allgemeine Java-Themen 2
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
E Reflection? Frage Allgemeine Java-Themen 4
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
G Klassen Cast auf Argumentenklasse via Reflection? Allgemeine Java-Themen 10
H Collections Generics und Reflection Allgemeine Java-Themen 6
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
P Reflection "Cast" Allgemeine Java-Themen 5
D Reflection-Performance Allgemeine Java-Themen 7
S Reflection und Generic Allgemeine Java-Themen 9
W Reflection -> getMethod bei optionalen Parametern Allgemeine Java-Themen 4
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
M Probleme mit Reflection Allgemeine Java-Themen 10
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
G Java Reflection Allgemeine Java-Themen 11
N Reflection: NoSuchMethodException obwohl Methode existiert Allgemeine Java-Themen 2
brunothg Problem mit Reflection Allgemeine Java-Themen 6
M reflection in inner classes Allgemeine Java-Themen 7
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
Y Reflection und "extends" Schlüsselwort Allgemeine Java-Themen 3
R Reflection Problem Allgemeine Java-Themen 4
N getName() of reflection Object Allgemeine Java-Themen 4
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
M Reflection Queue auslesen Allgemeine Java-Themen 6
N generic reflection Allgemeine Java-Themen 5
megachucky Java Reflection -> versteckte Felder finden? Allgemeine Java-Themen 3
MQue Reflection Exception Allgemeine Java-Themen 11
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
R Reflection: Membervariablen-Initialwerte Allgemeine Java-Themen 4
G Reflection Allgemeine Java-Themen 6
V reflection in java 5 und 6 Allgemeine Java-Themen 2
C Reflection Übergabeparamter überprüfen? Allgemeine Java-Themen 3
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
G [Reflection + WebService] Methodenaufruf an einem Proxy Allgemeine Java-Themen 11
T Parameternamen mit Reflection-API Allgemeine Java-Themen 14
M reflection mit parametern Allgemeine Java-Themen 8
M Reflection Frage Allgemeine Java-Themen 7
G Code vereinfachen bei Reflection Allgemeine Java-Themen 4
I reflection get inner static classes Allgemeine Java-Themen 2
C Reflection Allgemeine Java-Themen 12
Y Reflection - wie kann ich eine Methode benutzen Allgemeine Java-Themen 4
Y Reflection - wie anwenden/benutzen bei folgendem Problem Allgemeine Java-Themen 3
P Java Reflection API - ResultDataModel ? Allgemeine Java-Themen 3
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
G Reflection: aktuelle bzw umschliessende Methode? Allgemeine Java-Themen 7
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
C Reflection Problem! Allgemeine Java-Themen 2
G Object cast via Reflection Allgemeine Java-Themen 8
T Reflection und Typsicherheit Allgemeine Java-Themen 5
Q Umgang mit Reflection Allgemeine Java-Themen 4
S reflection Allgemeine Java-Themen 12
X Reflection performant? Allgemeine Java-Themen 11
M Reflection und Serializable Allgemeine Java-Themen 5
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
the[V]oid Primitive Arrays per Reflection erzeugen? Allgemeine Java-Themen 2
W Package via Reflection parsen Allgemeine Java-Themen 4
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
M reflection Integer != int ? Allgemeine Java-Themen 3
M reflection invoce Allgemeine Java-Themen 3
K Reflection:Zugriff auf innere Klassen Allgemeine Java-Themen 4
N NoSuchMethodException bei Reflection-Versuch, aber warum? Allgemeine Java-Themen 3
byte Methodenaufruf per Reflection? Allgemeine Java-Themen 2
M Generics und Reflection Allgemeine Java-Themen 3
M Array per Reflection manipulieren Allgemeine Java-Themen 5
M Klassen von ausserhalb des Jars per Reflection nachladen Allgemeine Java-Themen 2
thE_29 Reflection Allgemeine Java-Themen 6
M statische Methode per reflection aufrufen Allgemeine Java-Themen 2
B Frage zu Reflection Allgemeine Java-Themen 3
V Reflection - Problem Allgemeine Java-Themen 3
clemson Reflection Interface Allgemeine Java-Themen 4
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
N Reflection: An Package einer .class-Datei kommen Allgemeine Java-Themen 2
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B Reflection Allgemeine Java-Themen 10
C Reflection und variable casten ! Allgemeine Java-Themen 10
C Reflection - Kurze Beschreibung? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben