Generics und "generische Feldzuweisungen"

shakesbiier.

Mitglied
Hallo erstmal, wie ihr sehen könnt bin ich ein ziemlicher Anfänger und kenne mich mit Fachtermina auch überhaupt nicht aus. Ich hab jetzt aber mein fabel fürs Programmieren wiederentdeckt komme aber mit Java gerade nicht weiter. Man möge mir bitte die unpräzise Schreibweise meines Problemes nachsehen.

Nun denn:
Zur groben Problemdarstellung:

Ich möchte CSV auslesen, und deren daten möglichst effizient verarbeiten. Nun fehlt mir natürlich der weitblick um die effizienz zu beurteilen, und so begnüge ich mich eigentlich gerade damit möglichst allgemeingültigen Code der Oberklassen zu schreiben, dabei bin ich über die Generics gestolpert.
Mein Programm soll diverese Arten von CSV-Dateien einlesen und das möglichst allgemein(generisch).
Das einlesen und verarbeiten an sich ist eigentlich gar kein Problem, bei mir haperts aber gerade daran, die oberklasse so zu schreiben, dass die abgeleiteten klassen objekte generieren und in Hashsets speichern, welche dann unterschiedlich viele Felder haben.

Hier mal mein kläglicher, und offensichtlich vergeblicher Versuch:
Java:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.lang.reflect.*;

@SuppressWarnings("serial")
public class MyHashSet<E> extends HashSet<E> {
	protected String filepath;
	protected HashSet<E> MySet = new HashSet<E>();

	protected void createSetFromFile(){
		String[] parts;
		E obj = (E) new Object();	
		
		Field[] fields = obj.getClass().getFields();
		
		if(filepath!=null){
			
			try {
				BufferedReader in = new BufferedReader(new FileReader(this.filepath));
				do{
					parts = in.readLine().split(",");
					
					for(int f=0;f<fields.length;f++){
						fields[f].set(obj, fields[f].getClass().cast( parts[f]));
						MySet.add(obj);
						System.out.println(parts[f]);
					}
				}while(in.readLine()!= null);
				
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else
			System.out.println("filepath == null");
	}
	

	public MyHashSet(String filepath){
		super();
		this.filepath = filepath;
	}
	public MyHashSet(Collection<E> c){
		super(c);
	}
}

Da ist wahrscheinlich schon n Denkfehler oder n riesiger Konzeptionsfehler drinne, den ich aber irgendwie nicht ausfindig machen kann.
Das Programm prüft lediglich ob das Object "obj" Felder hat, und meint dann das es gar keine Felder gibt, sodass nichts zugewiesen wird :(
Ich bin mir zudem auch total unsicher wie man nun "sicher" und "gut" casten darf, kann darauf noch jmd ein wenig eingehen?


Mag mich bitte jmd bei der Handnehmen ;(
Vielen dank schonma fürs Lesen.

gruß
shakesbiier. ( mit Tippfehler schon bei der Registierung) :eek:
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Bin gerade nicht sicher was du meinst, und welcher Codeteil mit der Frage zu tun hat: Geht es um den Rückgabewert von Object.class.getFields() oder um das getFields/getDeclaredFields auf irgendeinem Objekt einer Klasse (die du gern festlegen würdest) ?
 

Landei

Top Contributor
So einfach funktionert das nicht. Es ist ziemlich schwierig, ein generisches Objekt zu erzeugen, wenn man vorher gar nicht weiß, was da für Typen ankommen. Bei JDBC, das ja etwas ähnliches macht wie du, ist das "ResultSet" z.B. auch nicht "generisch". Es ist prinzipiell möglich, soetwas hinzubekommen, z.B. über Tupel (siehe z.B. https://github.com/mallardsoft/javatuple.com ), aber die Frage ist, wie sinnvoll das überhaupt ist, weil der Anwender deiner Klasse ja sowieso schon irgendeine "Idee" haben muss, was er von dem CVS erwartet. Generell würde ich dir empfehlen, dich lieber an ResultSet (insbesondere Metadata) zu orientieren, anstatt dich an verwurstelten Generics zu verstricken.
 

shakesbiier.

Mitglied
Bin gerade nicht sicher was du meinst, und welcher Codeteil mit der Frage zu tun hat: Geht es um den Rückgabewert von Object.class.getFields() oder um das getFields/getDeclaredFields auf irgendeinem Objekt einer Klasse (die du gern festlegen würdest) ?
Um diesen Teil gehts mir eigentlich, der aber im Debugger nichtmal durchlaufen wird weil f< fields.length immer gilt.
Java:
                    for(int f=0;f<fields.length;f++){
                        fields[f].set(obj, fields[f].getClass().cast( parts[f]));
                        MySet.add(obj);
                        System.out.println(parts[f]);
                    }
Daher kam ich zu dem Schluss, dass ich irgendwas extrem falsch verstanden haben muss, weil mein Plan eigentlich vorsah den Laufzeittyp des typecasted (E) obj auszulesen( hmm dafür müsste ich wohl auch declaredfields nehmen, wobei ich mir den unterschied ma durchlesen müsste :) ), und die felder dann druch das String-Array "parts" zubefüllen.

So einfach funktionert das nicht. Es ist ziemlich schwierig, ein generisches Objekt zu erzeugen, wenn man vorher gar nicht weiß, was da für Typen ankommen. Bei JDBC, das ja etwas ähnliches macht wie du, ist das "ResultSet" z.B. auch nicht "generisch". Es ist prinzipiell möglich, soetwas hinzubekommen, z.B. über Tupel (siehe z.B. https://github.com/mallardsoft/javatuple.com ), aber die Frage ist, wie sinnvoll das überhaupt ist, weil der Anwender deiner Klasse ja sowieso schon irgendeine "Idee" haben muss, was er von dem CVS erwartet. Generell würde ich dir empfehlen, dich lieber an ResultSet (insbesondere Metadata) zu orientieren, anstatt dich an verwurstelten Generics zu verstricken.
Hmm, ich werd mal drüberlesen, ob das in die Richtung geht. Für mich ist eher wichtig, dass der Code nicht an jeder Stelle x-mal wiederholt geschrieben werden muss, was ich einfach persönlich extrem unschön und verwirrend finde, und dass die klasse möglichst flexibel verwendet werden kann, auch wenn das nur für mich ist, da ich mir eigentlich gerade nur eigene Oberklassen zusammenschreiben wollte.

Nochmal was konkretes:

Die Objekte die ich erzeugen möchte sind eigentlich relativ harmlose dinger, in c++ würde man das wohl "unions" schimpfen. Die Sache ist einfach nur, dass die Textdateien halt alle kommaseperiert sind, aber die anzahl an feldern halt unterschiedlich, je nach zieltyp.
Also beispielsweise:

Java:
Objekt Buch:
-autor
-seitenzahl
-verlag

Objekt kaffee
-land
-kilo
-preis
-boolean ausKatzenpopo
-bohnen?
-lecker?

sowas halt ^^
Das eine Objekt hat 3 felder, das andere aber 6 oder so, und genau diese struktur liegt auch schon in den Dateien vor, aber ich möchte halt nicht den selben einlese/auslese code für jede implementierung kopieren, ich find das einfach super unschön, und daher dachte ich mir versuch ich mein glück mal so, und frag was andere dazu zu sagen haben ;D
 

Landei

Top Contributor
Aha, also eher etwas in Richtung "binding": Der Anwender gibt ein Klasse vor (entweder entsprechend Bean-Spec, oder mit Annotations) und bekommt eine Liste entsprechender Objekte zurück, die aus dem CSV "gefüllt" werden. Das wäre ein ganz netter Ansatz.
 

shakesbiier.

Mitglied
Das klingt jetzt zumindest so, als sei klar geworden was ich möchte, das ist schonmal gut :lol:

Nun aber wieder zu dem grund, warum das hier im AnfängerForum steht: Es geht so nicht wie ichs versucht habe, kann mir da jemand helfen? :)

P.S.: Ich schau dann ma was ich zu "bindings" finde, links bin ich aber auch nicht abgeneigt, brauch noch was fürn zug nachher :]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Generics machen mich verrückt Java Basics - Anfänger-Themen 8
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
MarvinsDepression Datentypen Generics: Erste Berührungen Java Basics - Anfänger-Themen 6
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
Cassy3 Generics - CompareTo Java Basics - Anfänger-Themen 21
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
districon Generics implementieren Java Basics - Anfänger-Themen 2
CptK Überprüfen ob übergebenes Objekt zu Generics passt Java Basics - Anfänger-Themen 2
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Hilfe bei Generics Java Basics - Anfänger-Themen 11
G Generics Compilerfehler Java Basics - Anfänger-Themen 6
G Generics Methoden Java Basics - Anfänger-Themen 7
G Generics Java Basics - Anfänger-Themen 3
L Generics Tripel Java Basics - Anfänger-Themen 26
W Fragen zu Generics Java Basics - Anfänger-Themen 14
S Hilfe. Generics und BiFunctions Java Basics - Anfänger-Themen 10
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Java Generics factory method Java Basics - Anfänger-Themen 2
M Verständnisfrage zu Generics Java Basics - Anfänger-Themen 7
I Generics und Comparable Java Basics - Anfänger-Themen 14
G Generics mit ? und Diamantoperator Java Basics - Anfänger-Themen 4
G Generics: Wildcard ? Java Basics - Anfänger-Themen 12
D Generics methode Java Basics - Anfänger-Themen 2
I Frage zu Generics und Wildcards Java Basics - Anfänger-Themen 2
N Generics und Casting eines Objekts Java Basics - Anfänger-Themen 1
A Generics Java Basics - Anfänger-Themen 6
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
W Generics - Typ zurückbekommen Java Basics - Anfänger-Themen 4
Dimax Erste Schritte Generics von Profis leicht erklärt Java Basics - Anfänger-Themen 7
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
J Collections Generics: Typ wird nicht erkannt Java Basics - Anfänger-Themen 7
D Generics ArrayList: Bug im Quellcode Java Basics - Anfänger-Themen 14
C Generics Java Basics - Anfänger-Themen 8
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
T Generics in Java... Java Basics - Anfänger-Themen 9
J Generics Java Basics - Anfänger-Themen 3
J Generics Datentypen vergleichen Java Basics - Anfänger-Themen 16
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
O Generics - Implementierung Java Basics - Anfänger-Themen 7
Shizmo Frage zu Generics Java Basics - Anfänger-Themen 3
F Multiple Generics Java Basics - Anfänger-Themen 10
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
H Typsicherheit/Generics Java Basics - Anfänger-Themen 1
U Java generics funktioniert nicht Java Basics - Anfänger-Themen 0
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Generics Java Basics - Anfänger-Themen 4
M Frage zu Generics in Klassen, Abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
R Compiler-Fehler Generics Problem Java Basics - Anfänger-Themen 2
K Interface Generics, Interfaces und Listen - ich bin verwirrt. Java Basics - Anfänger-Themen 7
K Generics bei Klassen- und Interfacedeklarationen Java Basics - Anfänger-Themen 3
D toArray und Generics Java Basics - Anfänger-Themen 2
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
C Erste Schritte Filter für Generics oder ähnliches Java Basics - Anfänger-Themen 2
M Frage zu Generics-Deklaration Java Basics - Anfänger-Themen 5
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
J Java Generics - Frage zu Types Java Basics - Anfänger-Themen 2
M <T> Generics Java Basics - Anfänger-Themen 7
B Interface Generics: prüfen ob Interface deklariert wird Java Basics - Anfänger-Themen 18
T Polymorphie Generics-Problem Java Basics - Anfänger-Themen 2
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Array Generics Java Basics - Anfänger-Themen 3
J Generics casten Java Basics - Anfänger-Themen 14
J Generics wildcard Java Basics - Anfänger-Themen 6
E Listen und Generics Java Basics - Anfänger-Themen 9
X Generics Java Basics - Anfänger-Themen 6
M Datei einlesen mit generics? Java Basics - Anfänger-Themen 9
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
M OOP Mit Generics auf Methoden zugreifen? Java Basics - Anfänger-Themen 10
S Generics Java Basics - Anfänger-Themen 4
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
L Datentypen Problem mit Generics und null Java Basics - Anfänger-Themen 6
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
W Interface Problem mit Generics Java Basics - Anfänger-Themen 2
M OOP Generics und Wildcards Java Basics - Anfänger-Themen 3
D Generics - Warnmeldungen Java Basics - Anfänger-Themen 2
M Polymorphie generics einsteigerprobleme Java Basics - Anfänger-Themen 3
D Vererbung Generics und Vererbung Java Basics - Anfänger-Themen 8
C Generics Array Java Basics - Anfänger-Themen 43
D Fehler mit generics Java Basics - Anfänger-Themen 10
S Generics - CaseInsensitiveMap selber schreiben? Java Basics - Anfänger-Themen 5
K Datentypen Generics Java Basics - Anfänger-Themen 3
P Comparable und Generics Java Basics - Anfänger-Themen 6
I Generics (Subtypen) Java Basics - Anfänger-Themen 17
N Typeinschränkung bei Generics Java Basics - Anfänger-Themen 13
C Generics und Cast Java Basics - Anfänger-Themen 5
H Generics werden in -source 1.2 nicht unterstützt Java Basics - Anfänger-Themen 16
M Datentypen Generics: Exacten Typ ermitteln Java Basics - Anfänger-Themen 6
N Generics und Interfaces Java Basics - Anfänger-Themen 5
lumo Java Generics Java Basics - Anfänger-Themen 19
M verlinkte Liste mit generics Java Basics - Anfänger-Themen 7
capgeti Datentypen Static methoden aus Superklasse mit Generics definieren? Java Basics - Anfänger-Themen 9
S Generics und Typerkennung Java Basics - Anfänger-Themen 7
A Cast ohne Warnung bei Generics Java Basics - Anfänger-Themen 2
B Java Listen und Generics Java Basics - Anfänger-Themen 35
O Abstract Method & Generics Java Basics - Anfänger-Themen 10
K Aufgabe Generics Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben