Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können

Charlie...

Mitglied
Hallo zusammen,

ich lese schon seit einiger Zeit bei euch mit und brauche nun mal selbst einen Denkanstoß.
Die Aufgabe handelt von Reflektions.
Es soll eine Klasse mit verschiedenen Konstruktoren, also ein Überladener übergeben werden.
Der Benutzer soll sich einen aussuchen und Argumente für die Parameter eingeben dürfen.
Wenn ein Parameter ein Referenztyp ist, wird rekursiv runtergegangen.
Dann wird ein Objekt erzeugt.

Ich komm nicht weiter…???:L
Bitte schaut einmal rein und gebt mir einen Tipp, wo ich ggf. mal was nachlesen könnte oder wie ich am Besten weitermache.

Herzlichen Dank,

Charlie…

Hier meine EingabeKlasse
Java:
import java.util.Scanner;

public class Eingabe {
	
	/**
	 * @return
	 */
	protected static String benutzereingabe() {
		Scanner sc = new Scanner(System.in);
		 System.out.println("Bitte Klasse oder Objekt eingeben: ");
	     String eingabe = sc.next();
		return eingabe;
	}

}

Hier die Starterklasse:
Java:
public class ObjektBrowserStarter {

	/**
	 * @param args
	 * @throws ClassNotFoundException
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InstantiationException {

		String eingabe = Eingabe.benutzereingabe();

		Class<?> theClass = Class.forName(eingabe);		

		ObjektBrowser.getOurConstructors(theClass);
		
		Object o= ObjektBrowser.theNewinstance(theClass);

		ObjektBrowser.getOurMethods(theClass);
		
		ObjektBrowser.getOurFields(theClass, o);

	}

}


Und hier die Anwedung:
Java:
public class ObjektBrowser<theClass> {

	/**
	 
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 */

	/**
	 * @param theClass
	 * @return
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 */

	protected static Object theNewinstance(Class<?> theClass)
			throws InstantiationException, IllegalAccessException {
		
		Object obj = theClass.newInstance();
		return obj;

	}

	protected static void getOurMethods(Class<?> theClass) {
		Method[] methoden = theClass.getMethods();
		for (Method method : methoden) {
			System.out.println("Methode: " + method);
			/**
			 * TODO hier muss eine Abfrage herein, ob eine Methode ausgeführt
			 * werden soll. Aufgabentext: "Der Benutzer kann dann Methoden
			 * ausführen und bekommt das Objekt mit den ggf. veränderten Werten
			 * angezeigt. Wählt er eine Methode mit Rückgabetyp nicht-void aus,
			 * so kann mit dem Ergebnis weitergearbeitet werden."
			 **/

		}
	}

	/**
	 * @param theClass
	 * @return 
	 */
	protected static void getOurConstructors(Class<?> theClass) {
		Constructor<?>[] constructoren = theClass.getConstructors();
		for (Constructor<?> constructor : constructoren) {				
				System.out.println("Konstruktor von " + theClass.getName()
						+ " " + constructor.toString());					
		Object [] param= constructor.getParameterTypes();
			for (Object object : param) {
				System.out.println("Parameter des Konstruktors"+ constructor.getName()+ "  "+ object.toString());
			}
			
		}
		
		
	}

	protected static void getOurFields(Class<?> theClass, Object obj)
			throws IllegalArgumentException, IllegalAccessException {
		Field[] ourFields = theClass.getDeclaredFields();
		for (Field field : ourFields) {
			System.out.println("Name " + field.getName() + " Typ:"
					+ field.getType() + " Sichtbarkeit: "
					+ field.isAccessible());
			field.setAccessible(true);

			/**
			 * TODO Problem hier: Die get() Methode hat ein Objekt als
			 * Parameter. Wir wissen noch nicht welches das sein soll
			 */

			if (field.getType().isPrimitive()
					&& field.getType().equals(Integer.class)) {
				System.out.println(field.get(obj) + "int");
			}
			if (field.getType().isPrimitive()
					&& field.getType() == Double.class) {
				System.out.println(field.get(obj).toString() + "double");
			}
			if (field.getType().isPrimitive() && field.getType() == Long.class) {
				System.out.println(field.get(obj).toString() + "long");

			} else if (field.getType().isArray()) {
				Object array = field.get(obj);
				int length = Array.getLength(array);
				System.out
						.println("Die Länge Ihres Arrays beträgt: "
								+ length
								+ "Elemente. Mehr Informationen sind derzeit leider nicht möglich");
			}
		}
	}

}


Herzlichen Dank nochmal :)
 

Landei

Top Contributor
[c]public class ObjektBrowser<theClass>[/c] ist schonmal Käse. Du wirst alles über Reflection (und mit vielen Casts) machen müssen, da brauchst du keine Generics.

"Die get() Methode hat ein Objekt als Parameter. Wir wissen noch nicht welches das sein soll"

Bei statischen Feldern null, bei Instanz-Membern die Instanz. Wenn ihr also gerade das x-Feld von einem Point habt, muss da ein Point-Objekt übergeben werden.
 

Charlie...

Mitglied
"public class ObjektBrowser<theClass> ist schonmal Käse. Du wirst alles über Reflection (und mit vielen Casts) machen müssen, da brauchst du keine Generics."

Interessante Anmerkung, weil ich dachte, dass Generics eben auch dazu dienen viele Casts zu vermeiden??

"Die get() Methode hat ein Objekt als Parameter. Wir wissen noch nicht welches das sein soll"
Das Objekt ist das von dem ausgewählten Constructor erzeugte

Und die Frage ist ja eben, wie erzeuge ich dieses Objekt.
Hoffe das war jetzt verständlicher?

DANKE
 
S

SlaterB

Gast
> Interessante Anmerkung, weil ich dachte, dass Generics eben auch dazu dienen viele Casts zu vermeiden??

wenn man als Anwender einer Klasse den Typ kennt, List<String>,
sofern aber der Aufrufer die Klasse auch nur als Benutzereingabe hat, hat er keine Verwendung für Generics,

zwingend streichen musst du es vielleicht nicht, aber zumindest dir klar machen warum es da ist,
ob du es bisher schon verwendest

> Und die Frage ist ja eben, wie erzeuge ich dieses Objekt.

an der Stelle des Kommentars im Quellcode scheint das unerheblich, da ist das Objekt schon fertiger Parameter,
erzeugt wird woanders,

die Funktion von getOurConstructors() ist im Moment etwas unklar,
allgemein kannst du, wie du selber schon schreibst, mit ähnlichen Code anhand von Einschränkungen wie Parameter-Anzahl, Datentypen einen passenden Konstruktor auswählen und mit dem ein Objekt erzeugen
 

Kevin94

Top Contributor
Also ich würde es so aufbauen:
In getOutConstructors alle Construktoren aussortieren, die Parameter haben die man nicht in der Console eingeben kann, also all bis auf String,int,double,... und deren Arrays und diese Zurückgeben.
Dann würde ich den Benutzer Fragen welche der Konstruktoren er aufrufen möchte (durchnummeriern und Zahl eingeben lassen)
Als letztes würde ich nacheinander jeweils einen Parameter abfragen und in ein Object[] speichern. Das kannst du dann bei newInstance übergeben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaNewbie2.0 Benutzer/Passwörter verwalten Allgemeine Java-Themen 11
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
I Benutzer und deren Rechte auslesen Allgemeine Java-Themen 4
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
B Benachrichtigung, wenn sich Benutzer am Betriebssystem anmeldet Allgemeine Java-Themen 9
M Log4J funktioniert nicht unter anderem Benutzer Allgemeine Java-Themen 5
J Daten bei dem Benutzer speichern Allgemeine Java-Themen 6
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
U Benutzer herausfinden Allgemeine Java-Themen 3
R Windows-Dienst und angemeldeter Benutzer Allgemeine Java-Themen 10
U JFrame, JOptionPane - vor dem Schließen Benutzer fragen Allgemeine Java-Themen 10
J Benutzer Hilfe erstellen Allgemeine Java-Themen 4
J Welchen Packager soll ich verwenden. Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
Noahscript Konto anlegen um JDK herunterzuladen? Was soll das? Allgemeine Java-Themen 1
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
M 4 Gewinnt KI macht nicht, was sie soll.. Allgemeine Java-Themen 1
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
R serielles Terminal mit Java: Cursor soll blinken Allgemeine Java-Themen 4
L Wie genau soll ein Klassendiagramm sein Allgemeine Java-Themen 4
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
S Bachelorarbeit , soll ich ? soll ich nicht? Allgemeine Java-Themen 23
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
H JFileChooser soll NUR Windows-Netzwerkumgebung anzeigen Allgemeine Java-Themen 2
I JTextArea soll nur drei Zeilen anzeigen Allgemeine Java-Themen 1
K Methode soll neue Buttons erstellen Allgemeine Java-Themen 5
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
L JAR verändern - JAVAC soll einfach nur kompilieren, ohne Prüfungen Allgemeine Java-Themen 16
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
D Input/Output Datei ausgewählt - Datei soll nicht existieren Allgemeine Java-Themen 5
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
L Entscheiden, welcher Code ausgeführt werden soll Allgemeine Java-Themen 7
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
R FileChooser soll nur das File ausgeben Allgemeine Java-Themen 4
B Java soll Datei von Javascript empfangen Allgemeine Java-Themen 4
E Bitcode liegt vor und soll gespiegelt werden Allgemeine Java-Themen 4
B Scheduler soll bestimmten Job stoppen Allgemeine Java-Themen 4
H2SO3- jar soll eigenen namen(pfad) finden Allgemeine Java-Themen 12
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
B Thread soll anderen Thread beenden Allgemeine Java-Themen 5
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
Developer_X JButton soll gar nichts machen Allgemeine Java-Themen 8
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
G Was ist Ant und warum soll ich das brachen, wenn es IDEs gib Allgemeine Java-Themen 10
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
P Copiler soll nicht vorhandene Methoden ignorieren Allgemeine Java-Themen 2
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
J double 3.0 soll ohne Nachkommastelle ausgegeben werden Allgemeine Java-Themen 12
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
S String soll Anführungszeichen enthalten. Allgemeine Java-Themen 2
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
Y Methode soll 2 Werte zurückliefern Allgemeine Java-Themen 7
ARadauer programm soll sich selbst ändern können Allgemeine Java-Themen 20
F Klasse soll sich selbst returnieren mit entsprechendem Typ. Allgemeine Java-Themen 15
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
A NullPointerException, Thread soll Thread steuern Allgemeine Java-Themen 2
MQue HintergrundFarbe des Buttons beim drücken soll bleiben Allgemeine Java-Themen 2
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
E Java-Programm soll Java-Programm "fernsteuern" -wi Allgemeine Java-Themen 3
G Jar File soll anderes benutzen Allgemeine Java-Themen 3
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
Q Methode soll auf schließen eines Frames warten Allgemeine Java-Themen 4
S Log4J mit 2 Appender, einer soll nur INFO loggen Allgemeine Java-Themen 3
H Nur bis zur letzten Textzeile soll gelesen werden Allgemeine Java-Themen 4
G Was soll noch alles in Java kommen? Allgemeine Java-Themen 14
K Methode soll ein Array zurückgeben Allgemeine Java-Themen 4
M Ein Thread soll ein Textfeld (SWT) ändern Allgemeine Java-Themen 4
P Javaprogramm soll doppeltgeklickte Datei verarbeiten Allgemeine Java-Themen 22
B Thread soll auf Event warten, dann Daten an Klasse senden Allgemeine Java-Themen 2
R Thread soll auf MouseClick warten Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
S Java Programm soll im Hintergrund laufen (vgl. fork() bei C) Allgemeine Java-Themen 10
G To many Code? Was soll der scheiß? Allgemeine Java-Themen 11
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
thE_29 Werden die SUN JVMs immer blöder oder was soll das. Allgemeine Java-Themen 11
T Klasse soll Object sein->um in JTabbedPane einzufügen Allgemeine Java-Themen 2
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
1 Applet soll PDF von Servlet empfangen Allgemeine Java-Themen 3
S Welchen Editor soll man für Graphische lösungen benutzen Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2
M Was soll ich benutzen? Java2D, Java3D, Swing, AWT?? Allgemeine Java-Themen 21
R EOFException was soll der ... Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben