Generisches Object erstellen

Status
Nicht offen für weitere Antworten.
D

Dekker

Gast
Hi,
häng hier gerade an folgendem Problem:
Ich möchte eine Klasse schreiben, die einen Graphen speichern kann. Gleichzeitig soll die Klasse eben wiederverwendbar bleiben, da ich hier je nach Aufgabe mit unteschiedlichen Knoten- und Kantentypen arbeiten muss.

Klassen header sieht wie folgt aus:
Code:
public class Graph<V extends Vertex,E extends Edge<V>> {
	// Stores Edges and Vertices and graphtype
	private Vector<V> vertices;
	private Vector<E> edges;
	boolean directed;
	// Stores adjacency list
	private HashMap<V,Vector<E>> adjacency_list; // V is the key and also the startvertex
}

Vertex und Edge<V> sollen sicherstellen, dass Kanten und Knoten die Standardfunktionen wie z.b. setID für Knoten namen etc. haben.

Problem ist jetzt aber, dass die Klasse nun auch einen Graphen aus einer übergeben Datei erstellen können soll. Kann ich das den irgendwie mit generischen Typen realisieren?

Funktion sieht bisher so aus:
Code:
public void create_from_file(String filename){
		try{
			if(filename == null) throw new IllegalArgumentException("No filename was given");
			// Create a new buffered reader to read from the file
			BufferedReader buf = new BufferedReader(new FileReader(filename));
			// Instantiate a new tokenizer to parse the file 	
			StringTokenizer tokenizer = new StringTokenizer(buf.readLine());
			if(tokenizer.countTokens() < 5 || tokenizer.countTokens() > 5 ) 
				throw new FileFormatException("Problem in file header");
			// Parse headerline 
			String type = tokenizer.nextToken(); // Graph type
			String n = tokenizer.nextToken(); 
			n = tokenizer.nextToken(); 			// Number of vertices
			String m = tokenizer.nextToken();
			m = tokenizer.nextToken();			// Number of edges
			
			if(type == "g") this.directed = true;
			int nv = Integer.valueOf(n);
			int mv = Integer.valueOf(m);
			
			// Create vertices
			V helpvert;
			for(int i = 0; i < nv; i++){
				!!helpvert = new V(i);!! das hier geht  
				helpvert.setID(i);
				this.vertices.add(helpvert);
			}			
			
		}catch(Exception e){
			System.out.println(e);
		}
	}

Problem ist halt die mit !!..!! markierte Zeile. Mir ist klar, dass das so nicht funktioniert. Kennt hier jemand ne Möglichkeit? Im schlimmsten Falle, müsste ich halt jedesmal Vertex und Edge für jede Aufgabe komplett neu für die Graphenklasse erstellen, fände es aber schöner wenn ich es so irgendwie hinkriegen könnte.

Habe auch schon einige Zeit damit verbracht, in docs etc nach Möglichkeiten zu suchen, bin aber bisher leider nicht erfolgreich gewesen.

Schonmal danke im vorraus.

[Bevor wer meckert, ja die selbe Frage habe ich auch in einem anderen Forum gestellt, da gabs aber auch noch keine Antwort =( ]
 
S

SlaterB

Gast
wenn du unbekannte Klassen dynamisch erzeugst/ verwendest, dann kannst du eins als aller erstes merken:
mit Generics hat dass dann am allerwenigsten zu tun,
Generics spielen immer nur dann ne Rolle, wenn der Compiler einen konkreten Typ kennt,

> V helpvert;
ist also aus dem Spiel,
du brauchst
Vertex helpvert;

da du wohl keine besondere Klasse kennst, musst du eine Standardklasse zur Verfügung haben, z.B.

class SimpleVertex implements Vertex,

die bietet genau das an, was das Interface verlangt, und mehr brachst du in dieser Methode auch nicht,

---

da du nun wieder weißt, welcher generischer Typ hier ne Rolle spielt,
kannst du den Graph vom Typ SimpleVertex erstellen,
aber das macht wohl inhaltlich keinen Unterschied zu einem Graph ohne generischen Typ


--------


hmm, wenn ich nochmal genau nachschaue, dann scheint das eine Methode innerhalb von Graph zu sein,
was generell eher keine gute Idee ist (Datenstrukturen möglichst ohne Logik),
aber dann vielleicht bedeutet, dass V durch den Aufrufer mit einer bestimmten generischen Klasse vorbelegt ist, und diese verwendet werden soll?

new V geht dann aber immer noch nicht, du musst das Class-Objekt übergeben, Class<V> vClass,
und dann könntest du Reflection verwenden:
vClass.newInstance();

das geht aber nur ohne Parameter besonders leicht,
wenn du einen Parameter i hast (was das Interface Vertex ja nicht vorgeben kann),
dann schau mal tiefer bei Reflection vorbei (falls interessiert), dann musst du dir den passenden Konstrukor raussuchen und die Parameter in einem bestimmten System übergeben


> Bevor wer meckert, ja die selbe Frage habe ich auch in einem anderen Forum gestellt, da gabs aber auch noch keine Antwort =(

Link posten!
vielleicht hat inzwischen schon wer was hingeschrieben und meine 7 Min. waren gerade verschwendet!
 
D

Dekker

Gast
Keine Angst, auf der anderen Seite kamen so hilfreiche posts wie "C++ to the rescue" und dass ich die Streams auch wieder schliessen sollte ;). Aber Vorsicht, ist keine Codingforum, aber normal Laufen dort genug Leute rum, die sich mit Java auskennen: Inquake -Coding

hmm, wenn ich nochmal genau nachschaue, dann scheint das eine Methode innerhalb von Graph zu sein,
was generell eher keine gute Idee ist (Datenstrukturen möglichst ohne Logik),
aber dann vielleicht bedeutet, dass V durch den Aufrufer mit einer bestimmten generischen Klasse vorbelegt ist, und diese verwendet werden soll?

Genau das. Ich weiß, dass man es normalerweise trennen sollte. Vor allem würde dann mein Problem nicht auftreten. Leider ist es allerdings so in der Aufgabenstellung verankert, dass diese Funktion in die Klasse gehört. Tut mir leid, dass ich das nicht gescheit Formuliert habe.

Ich werde mir deinen Tipp aufjedenfall mal ansehen und schonmal vielen Dank!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L generisches Array Allgemeine Java-Themen 1
S Generisches generve... Allgemeine Java-Themen 9
B Generisches Singleton implementieren Allgemeine Java-Themen 12
P JDK nicht installiert in Net Object Fusion Allgemeine Java-Themen 7
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
Zeppi Cast Object in Generics Allgemeine Java-Themen 4
MoxxiManagarm Mapping into existing object Allgemeine Java-Themen 15
coolian Swing erstellt fillreckt immmer ein neues object Allgemeine Java-Themen 13
N Wo ist Object.class ? Allgemeine Java-Themen 0
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
Z Vergleich zwischen int und Object Allgemeine Java-Themen 1
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
L Sortieren von "Map<String, Object>" Allgemeine Java-Themen 2
M Cast double[]-->Object[] oder Vector<double[]> Allgemeine Java-Themen 3
G REST- Object darstellung Allgemeine Java-Themen 6
C Object.equals() liefert falschen Wert? Allgemeine Java-Themen 14
darekkay Generics: Wildcard und Object Allgemeine Java-Themen 5
O Socket Object wird scheinbar falsch empfangen Allgemeine Java-Themen 6
N Klasse/Object Eigenaufruf Allgemeine Java-Themen 5
G JNI Shared Object Allgemeine Java-Themen 10
B Variable class in java.lang.Object Allgemeine Java-Themen 11
S Klassen Zuorgnung Object-char Allgemeine Java-Themen 2
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
A Input/Output Serialisierung und Object.hashCode() Allgemeine Java-Themen 3
M Jaxb und JPA: A cycle is detected in the object graph Allgemeine Java-Themen 5
H double dispatch und equals(Object) Allgemeine Java-Themen 6
J Datentypen Problem mit Date-Object Allgemeine Java-Themen 2
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
J Casting Problem Object, Double und String Allgemeine Java-Themen 3
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
P Tree Object structure Allgemeine Java-Themen 19
G Object mit clone kopieren Allgemeine Java-Themen 21
J merkwürdig: Object Allgemeine Java-Themen 6
woezelmann Object nach Deserialisierung nicht mehr gleich Allgemeine Java-Themen 13
Iron Monkey Object in Datei effizienter lesen / schreiben Allgemeine Java-Themen 13
L Object = null? Allgemeine Java-Themen 16
dayaftereh Serializable und Object In/Out Stream Allgemeine Java-Themen 2
T Object auf Double, Int, String testen Allgemeine Java-Themen 5
N serialize deserialize java object über string Allgemeine Java-Themen 8
N getName() of reflection Object Allgemeine Java-Themen 4
B Probelm mit File Object Allgemeine Java-Themen 6
G NoClassDefFoundError: java/lang/Object Allgemeine Java-Themen 4
S Liste Object Löschen Allgemeine Java-Themen 7
P not enough space for object heap - Trotz mehr RAM? Allgemeine Java-Themen 6
MQue List<String> aus List<Object> generieren Allgemeine Java-Themen 2
M ArrayList<Object[]> und toArray() Allgemeine Java-Themen 5
Daniel_L LinkedList vom Typ Object-Array? Allgemeine Java-Themen 4
B Warum return type Object ? Allgemeine Java-Themen 4
M Databinding von Object zu properties-Datei Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
A NullPointer bei konvertierung von byteArr --> Object Allgemeine Java-Themen 3
foobar Object to byte[] ohne Serializable Allgemeine Java-Themen 6
reibi Object clonen spezial Allgemeine Java-Themen 8
C casten vom Typ Object nach Double[][] Allgemeine Java-Themen 2
X cannot convert from Object[] to Integer[] Allgemeine Java-Themen 2
G JSON Object auslesen Allgemeine Java-Themen 1
T cast Object to Double[] Allgemeine Java-Themen 2
G Object. Wrapper Allgemeine Java-Themen 12
V Object durchsuchen Allgemeine Java-Themen 4
U eigene Datenstruktur ArrayList<String> nach Object [][ Allgemeine Java-Themen 2
T "Object o = new Object()" vs. "new Object()&q Allgemeine Java-Themen 8
T Object -> byte[] Allgemeine Java-Themen 5
M Implementation von Zugriffen auf Object[index] in der JVM Allgemeine Java-Themen 9
T Klasse => Primitiv ? Object instanceof Klasse Allgemeine Java-Themen 2
B mit methode ein object zurückgeben. Allgemeine Java-Themen 5
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
T HashMap (String, Object(String , int)) nach int sortieren Allgemeine Java-Themen 7
P Typ Object in socket umwandeln Allgemeine Java-Themen 4
G Object cast via Reflection Allgemeine Java-Themen 8
Zed JList Object einfügen und Text anzeigen Allgemeine Java-Themen 3
MQue Object in Integer umwandeln Allgemeine Java-Themen 3
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
T double to object Allgemeine Java-Themen 3
S File Object zu Directory machen ? Allgemeine Java-Themen 9
V Brauche dringend Hilfe. Object-handling Allgemeine Java-Themen 4
N Warning "The Cast from Object to" Allgemeine Java-Themen 9
K Threads und ein übergeordnetes Object Allgemeine Java-Themen 7
F Zugriff mittels getObject() oder this.object ? Allgemeine Java-Themen 8
W Object -> isPrimitiv? Allgemeine Java-Themen 7
D Cast schlägt fehl : Object[] zu Button[] Allgemeine Java-Themen 2
S Object nach Integer umwandeln Allgemeine Java-Themen 13
R object zu array casten. Allgemeine Java-Themen 2
N Map Object Allgemeine Java-Themen 13
G Eine C/C++ Referenz in einem Java Object speichern Allgemeine Java-Themen 5
N Ermitteln welchen Typ ein "Object"-Objekt enthält Allgemeine Java-Themen 11
K Cast ohne neues Object zu erzeugen Allgemeine Java-Themen 12
D Object in int casten Allgemeine Java-Themen 7
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben