Saubere Verwendung von Generic Types

Hallo,

ich möchte folgende Struktur umsetzen:

abstrakt.png

CardReader und Formatter sind Interfaces.

AbstractReaderX und AbstractFormatterX.X sind abtrakte Klassen.

ConcreteReaderX und ConcreteFormatterX.X sind Klassen die die jeweiligen abstrakten Klassen implementieren sollen.

Natürlich möchte ich hier das ein ConcreteReader1 nur Objekte vom Typ ConcreteFormatter1.1.X annimmt (Analog auch der ConcreteReader2)

Ich würde bei dem Klassendesign diese Einschränken über Generic Types abbilden.
D.h. die Klasse ConcreteReader würde ich so definieren

Code:
public class ConcreteReader1<T extends AbstractFormatter1.1> extends AbstractReader<T> {

	@Override
	public void setFormatter(T formatter) {
		// TODO Auto-generated method stub		
	}
}

Mich würde interessieren ob ein solchen Vorgehen als "sauberes Vorgehen" zu definieren wäre. Oder ob es komplett die Idee der Objektorientierung sprengt.
 

Anhänge

  • abstrakt.png
    abstrakt.png
    23,3 KB · Aufrufe: 36
Zuletzt bearbeitet:

Tobse

Top Contributor
Ich denke nicht, dass das funktioniert. Wenn das Interface CardReader mit Formatter definiert ist, müssen alle Erbenden Klassen das auch so implementieren; ergo muss jeder CardReader mit jedem Formatter zurechtkommen.
 
Oh sorry, das Schaubild widerspricht dem was ich programmiert habe. Tatsächlich wurde hier der generische Typ T verwendet.

Code:
public interface CardReader<T extends Formatter> {

	@Override
	public void setFormatter(T formatter) {
		// TODO Auto-generated method stub		
	}
}
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Achso, okey.

Als was "sauber" ist und was nicht, ist erstmal nicht so genau zu definieren. Ich persönlich finde es eine durchaus brauchbare Lösung für das Problem und ich sehe spontan auch kein Problem damit. Solange sich an der Grundlegenden Architektur nichts ändert sollte das auch ausreichen.
 

Thallius

Top Contributor
Ich verstehe dem Sionn des Ganzen noch nicht. Vor allem verstehe ich die Verbindung zwischen dem Abstract-Fomatter und dem Abstract-Reader so gar nicht? Wie soll das gehen? Das geht ja nur, wenn AbstractFormatter und ABstractReader immer genau das gleiche machen und dann sind sie ja nicht mehr abstract?
Wozu brauchst du die Abstracten Klassen überhaupt? Also ich meine das Interface erwartet ja schließlich irgendein definiertes Ergebnis. Dieses Ergebnis müssen die Klassen, welche das Interface implementieren erzeugen. Dazu brauche ich aber keine Anstracte Klassen oder?

Gruß

Claus
 
Prinzipiell sollen alle Reader die gleichen Funktionen bereit stellen. Deswegen das zentrale Interface.

Die abstrakten Klassen sollen eine Stufe einfügen, um konkrete Reader eines Herstellers zusammen zu fassen.

Jeder Reader kann verschiedene Medien lesen, die aber abhängig von Reader unterschiedlich formatiert werden müssen.
 
Zuletzt bearbeitet:

Tobse

Top Contributor
Jeder Reader kann verschiedene Medien lesen, die aber abhängig von Reader unterschiedlich formatiert werden müssen.
Wenn ein konkreter Reader anforderungen an das Format stellt, sollte er den Formatter auch selbst bestimmen. Wenn beide Hersteller unterschiedliche Daten speichern, macht es keinen Sinn, sie so über einen Kamm zu scheren.

ODER aber jeder Reader bestimmt einen Converter selbst, der die Hersteller-Spezifischen Datenstrukturen in eine allgemeingültige Datenstruktur überführt, die wiederrum von einer konkreten Implementierung von CardReader weiterverarbeitet wird.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
W Saubere Lösung für das Auslesen einer Html Seite (Mehrsprachigkeit) Allgemeine Java-Themen 5
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
M WSDL: Doppelte Typenames (Keine Verwendung möglich) Allgemeine Java-Themen 5
F Klassen Verwendung abstrakter Klassen Allgemeine Java-Themen 9
D Verwendung von Selenium Allgemeine Java-Themen 2
P ClassCastException bei Verwendung eines Interfaces Allgemeine Java-Themen 7
M Fehler bei Verwendung von TexturePaint Allgemeine Java-Themen 16
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
M Verwendung der Cipher von gnu crypto (Serpent) Allgemeine Java-Themen 3
B Verwendung von Packages im Java Code Allgemeine Java-Themen 10
P Richtige Verwendung eines Timers Allgemeine Java-Themen 8
T Warnungsfreie Verwendung von Generics Allgemeine Java-Themen 11
M Problem bei der Verwendung von AES Allgemeine Java-Themen 2
J Port verwendung Allgemeine Java-Themen 13
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
X Wie 'teuer' ist die Verwendung des Stack Trace ? Allgemeine Java-Themen 8
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
W Verwendung von byte Allgemeine Java-Themen 9
L Verwendung? Allgemeine Java-Themen 2
D Fehlerhafte Thread Verwendung beim arbeiten mit Sockets Allgemeine Java-Themen 6
N allg. Frage zur Verwendung von this Allgemeine Java-Themen 3
G Verwendung von DataInputStream und URL Allgemeine Java-Themen 2
C Seltsame Konstanten (und Verwendung) Allgemeine Java-Themen 15
X Exception bei Verwendung von systray4j Allgemeine Java-Themen 5
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
Rakshan Generic reading of XML document from the root tag into an Collection Allgemeine Java-Themen 0
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
Neumi5694 Datentypen Generic mit parameterlosem Konstructor Allgemeine Java-Themen 4
C Generic collections und static typing Allgemeine Java-Themen 4
K Generic class und Reflection Allgemeine Java-Themen 2
T Generic Allgemeine Java-Themen 1
C Generic-Funktion nur bei bestimmten Typen erlauben Allgemeine Java-Themen 6
M Cannot create a generic array of T Allgemeine Java-Themen 5
N Generic extends Generic Allgemeine Java-Themen 5
TheWhiteShadow Generic Bug? Allgemeine Java-Themen 19
P Generic zur Laufzeit Allgemeine Java-Themen 4
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
S Reflection und Generic Allgemeine Java-Themen 9
G Klasse eines Generic Allgemeine Java-Themen 6
J Generic von einer ArrayList/HashMap bekommen Allgemeine Java-Themen 7
G Generic merhfach Angabe Allgemeine Java-Themen 8
Dragonfire Generic Typ zur Laufzeit Allgemeine Java-Themen 9
N Casten durch generic vermeiden ?? Allgemeine Java-Themen 10
N generic reflection Allgemeine Java-Themen 5
thE_29 Generic Methoden die sich aufrufen wollen nicht immer Allgemeine Java-Themen 12
A Generic-Problem. was meint ihr dazu? Allgemeine Java-Themen 4
G unbekanntes Generic Allgemeine Java-Themen 12
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
V ArrayList ist nicht generic!?? Oder bin ich blöd? Allgemeine Java-Themen 2
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
C Generic Type ermitteln Allgemeine Java-Themen 3
H References to generic type Test.A<typ> should be param Allgemeine Java-Themen 5
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben