I/O Code Gerüst vorgegeben

ocsme

Top Contributor
Hallo zusammen,

nervig ich weiß doch ich hab wieder ein Stück Code vorgegeben bekommen und Fragezeichen im Kopf :(

Das ganze sieht so aus:

Code:
Interface ReadStream<T> {
    T read();
}

Interface WriteStream<T> {
    void write(T object);
}

class IOStream<T> implements ReadStream<T>, WriteStream<T> { ... }

Ihre Aufgabe ist, unter Verwendung des jeweils geeigneten der drei oben angegebenen Typen, eine Klasse ReadOnly und eine Klasse WriteOnly zu erstellen.
Nur Leseoperationen und Schreiboperationen für Strings


Meine Idee wäre so etwas in der Art.
Doch ich denke das ist wieder zu kurzsichtig gedacht oder :D
(Nur mal für ReadOnly class!)

Code:
class ReadOnly {
    IOStream<String> ios = new IOStream<>("Dateipath");
    
    String read() {
        return (String) ios.read();
    }
}


Ich weiß diese Aufgabe lässt auch wieder eine Frage offen da die IOStream<T> ja nicht gecodet wurde!

LG
 

temi

Top Contributor
Vielleicht etwa in der Art:

class ReadOnly implements ReadStream<String>

Ein sinnvoller Konstruktor wäre auch wünschenswert.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich weiß diese Aufgabe lässt auch wieder eine Frage offen da die IOStream<T> ja nicht gecodet wurde!
Das ist für die Aufgabe egal - das ist nur ein Interface und gegen das Interface solltest du implementieren ;)


Unklar ist eher, wie die Klassen ReadOnly und WriteOnly aussehen sollen. Steht da nicht mehr dazu? In die richtige Richtung könnten beide Varianten hier gehen....
 

ocsme

Top Contributor
Vielleicht etwa in der Art:

class ReadOnly implements ReadStream<String>

Das dachte ich auch zuerst doch dann müsste man ja die read() Methode selbst schreiben. Wenn ich ja eine Klasse habe die das Interface ReadStream<T> Implementiert muss das dort ja implementiert sein deswegen habe ich mich so entschieden.

Unklar ist eher, wie die Klassen ReadOnly und WriteOnly aussehen sollen. Steht da nicht mehr dazu? In die richtige Richtung könnten beide Varianten hier gehen....
Bei den Klassen stehen noch 2 Kommentaren hier mal was dort steht :)

Code:
class ReadOnly {
    //Definieren Sie eine Variable eingabe zum Lesen von Strings
    ...  <- soll unser Programmcode hin
    
    //Hier Methode zum Lesen einfügen
    ...
}


class WriteOnly {
    //Definieren Sie eine Variable ausgabe zum Lesen von Strings
    ...  <- soll unser Programmcode hin
    
    //Hier Methode zum Schreiben einfügen
    ...
}
 

temi

Top Contributor
doch dann müsste man ja die read() Methode selbst schreiben.

Die read-Methode hast du doch oben schon hingeschrieben...

Edit: Aber, da das Gerüst der Klasse "ReadOnly" oben bereits ohne "implements ReadStream<String>" angegeben ist, ist dein Ansatz wohl nicht ganz falsch. :)

Edit: Noch mal zum Implementieren des Interfaces. Genau das hast du ja gemacht, indem du in eine Methode mit der zum Interface passenden Signatur Code geschrieben hast, der das tut, was du möchtest.die Methode verlangt.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Und neben dem umbenennen: du sollst den geeignetsten Typ nutzen, und wenn du nur lesen musst ist das ....?
 

ocsme

Top Contributor
Naja meine Frage ist eigentlich eher die wieso ünnötig 2x das gleiche schreiben?

Wenn doch die Klasse IoStream die Interfaces implementiert dann stehen dort die Methoden zur Verfügung ich kann eine Instanz dieser Klasse erzeugen und diese Methoden nutzen oder habe ich dabei erneut ein Denkfehler und übersehe eben etwas das war die Frage :p

Denn andernfalls sollte das doch so gehen wie ich es oben geschrieben habe. Jetzt mal der Name der Variable außer acht gelassen. Denn andernfalls müsste man die T read() Methode selbst schreiben dabei könnte man ja den FileReader nutzen und immer 1 String lesen :)
 

temi

Top Contributor
Naja meine Frage ist eigentlich eher die wieso ünnötig 2x das gleiche schreiben?

Was meinst du damit?

Wenn doch die Klasse IoStream die Interfaces implementiert dann stehen dort die Methoden zur Verfügung ich kann eine Instanz dieser Klasse erzeugen und diese Methoden nutzen

Ja, das ist korrekt.

Denn andernfalls müsste man die T read() Methode selbst schreiben

Hättest du es so gemacht, wie ich in #2 geschrieben habe, dann hätte es genau deiner bereits gezeigten Implementation von read() entsprochen. Musst du aber nicht, wie wir aufgrund der Vorgabe (der Klassengerüste) gesehen haben.

Ich zitiere mich mal selbst:
Noch mal zum Implementieren des Interfaces. Genau das hast du ja gemacht, indem du in eine Methode mit der zum Interface passenden Signatur Code geschrieben hast, der das tut, was die Methode verlangt.
 
Zuletzt bearbeitet:

ocsme

Top Contributor
Achso, weil ich ja eh die read() Methode implementiere kann ich die Klasse implements Interface schreiben obwohl ich Intern die andere Klasse benutze und die meine Arbeit macht. So also:

Code:
class ReadOnly implements ReadStream<String> {
    IOStream<String> eingabe = new IOStream<>("Dateipath");
    
    String read() {
        return (String) eingabe.read();
    }
}
 

temi

Top Contributor
Achso, weil ich ja eh die read() Methode implementiere kann ich die Klasse implements Interface schreiben obwohl ich Intern die andere Klasse benutze und die meine Arbeit macht.

Genau so ist es. Du solltest dich allerdings an die vorgegebene Klasse halten und das "implements.." wieder entfernen.

Beachte noch den Hinweis von @mrBrown in #7 und mach einen sinnvollen Konstruktor, der dieses unschöne "Dateipath" beseitigt.


Edit: Ein Tipp von mir: Verwende beim Überschreiben/Implementieren von Methoden immer "@Override". Damit stellst du sicher, dass du auch tatsächlich die korrekte Signatur geschrieben hast. Im Fehlerfall würdest du eine Meldung vom Compiler erhalten. Außerdem zeigt es sofort, dass man hier eine Methode vor sich hat die überschrieben wird/ein Interface implementiert.
 

temi

Top Contributor
Code:
class ReadOnly implements ReadStream<String> {
    IOStream<String> eingabe = new IOStream<>("Dateipath");
   
    String read() {
        return (String) eingabe.read();
    }
}

Noch was: Schau dir mal deine Deklaration von "eingabe" an und das Interface "ReadStream". Welchen Typ liefert demnach die Methode eingabe.read() zurück?
 

ocsme

Top Contributor
Noch was: Schau dir mal deine Deklaration von "eingabe" an und das Interface "ReadStream". Welchen Typ liefert demnach die Methode eingabe.read() zurück?

T also String :D
Beachte noch den Hinweis von @mrBrown in #7 und mach einen sinnvollen Konstruktor, der dieses unschöne "Dateipath" beseitigt.
Ja das mach ich :)
Edit: Ein Tipp von mir: Verwende beim Überschreiben/Implementieren von Methoden immer "@Override". Damit stellst du sicher, dass du auch tatsächlich die korrekte Signatur geschrieben hast. Im Fehlerfall würdest du eine Meldung vom Compiler erhalten. Außerdem zeigt es sofort, dass man hier eine Methode vor sich hat die überschrieben wird/ein Interface implementiert.
achso @Override hat eine bedeutung :D ich lösche das immer weg :O das macht natürlich Sinn :p :)
 

ocsme

Top Contributor
Java:
public class ReadOnly {
    
    IOStream<String> eingabe;
    
    ReadOnly() {
        eingabe = new IOStream<>();
    }
    
    ReadOnly(File f){
        eingabe = new IOStream<>(f);
    }
    
    @Override
    String read() {
        return eingabe.read();
    }

}



public class WriteOnly {

    IOStream<String> ausgabe;

    WriteOnly() {
        ausgabe = new IOStream<>();
    }
    
    WriteOnly(File f){
        ausgabe = new IOStream<>(f);
    }
    
    @Override
    void write(String s) {
        ausgabe.write(s);
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Und wenn IOStream nur den Konstruktor private IOStream(int i, float f, boolean b, List<String> strings, Void v) hat? :p
Hint: ein Konstruktor, den du nicht kennt, kannst du nicht aufrufen - und in der Aufgabe wird keiner vorgegeben ;) Oder hast du das unterschlagen?
 

ocsme

Top Contributor
Ich könnte WEINEN :( wieso denke ich nie an so etwas?
Und wenn IOStream nur den Konstruktor private IOStream(int i, float f, boolean b, List<String> strings, Void v) hat? :p
Natürlich hast du vollkommen recht.

Darf man davon ausgehen das das Interface wie die Klasse hier:
benutzt werden kann.
Dann wäre ReadStream<T> ja mit InputStream überladen und man könnten diesen nutzen?
Oder ist das nun auch wieder ein Denkfehler :(

Wie behält man nur der Durchblick bei so vielen Klassen? Und dabei habe ich noch nicht mal angefangen mit GUI / JavaFX. Das sind dann ja gleich wieder ca. 1000 Klassen dazu :( :D

LG
 

mrBrown

Super-Moderator
Mitarbeiter
Darf man davon ausgehen das das Interface wie die Klasse hier:
ReadStream benutzt werden kann.
Dann wäre ReadStream<T> ja mit InputStream überladen und man könnten diesen nutzen?
Oder ist das nun auch wieder ein Denkfehler :(
Ja, ist ein Denkfehler. Du darfst nur von dem Code ausgehen, der oben steht.

Und deine Lösung von oben war sehr nah an der Richtgen Lösung.

Wie behält man nur der Durchblick bei so vielen Klassen? Und dabei habe ich noch nicht mal angefangen mit GUI / JavaFX. Das sind dann ja gleich wieder ca. 1000 Klassen dazu :(:D
Von denen man im Endeffekt nur ein paar weniger Klassen im alltäglichen Gebrauch nutzt - und die Doku gibts ja nicht ohne Grund.


Viel wichtiger ist, die Konzepte dahinter zu verstehen, so wie in diesem Fall mit grad mal drei vorgegebenen Klassen.
 

temi

Top Contributor
Ein Tipp von mir: Verwende beim Überschreiben/Implementieren von Methoden immer "@Override". Damit stellst du sicher, dass du auch tatsächlich die korrekte Signatur geschrieben hast. Im Fehlerfall würdest du eine Meldung vom Compiler erhalten. Außerdem zeigt es sofort, dass man hier eine Methode vor sich hat die überschrieben wird/ein Interface implementiert.

Ich muss mich noch einmal zitieren, mit einem Hinweis:

Die beiden Klassen deiner Lösung erweitern ("extends") keine andere Klasse und implementieren auch kein Interface. Damit ist die Methode "read()" einfach nur eine Methode, die mehr oder weniger zufällig so heißt, wie die Methode im Interface. In diesem Fall solltest du vom Compiler einen Fehler erhalten, weil du ihm mitteilst, dass du eine Methode überschreiben möchtest, dies aber tatsächlich nicht der Fall ist.
 

ocsme

Top Contributor
Mir fällt nichts besseres ein als das von oben.
Hab es mal nur über einen BufferedReader versucht. Dann sollte zwar der Konstruktor stimmen doch dann macht es im Sinne der Aufgabe sicherlich keinen Sinn mehr :D

Java:
import java.io.*;

public class ReadOnly {
    
    BufferedReader eingabe;
    
    ReadOnly() throws IOException  {
        eingabe = new BufferedReader(new FileReader(""));
    }
    
    ReadOnly(String path) throws IOException {
        eingabe =  new BufferedReader(new FileReader(path));
    }
    
    String read() throws IOException {
        return eingabe.readLine();
    }

}

Desweiteren gebe ich ja auch eine ganze Line zurück was nun mit 1em String gemeint ist ?

Danke trozdem nochmals :)

LG
 

mrBrown

Super-Moderator
Mitarbeiter
An deiner ersten Lösung musst du nur minimal was anpassen, damit die richtig ist.
Du hast drei Typen - ReadStream, WriteStream und IOStream - und du musst nur Lesen: welches ist dann der geeignete Typ?



Die BufferedReader-Variante hat dagegen nichts mit der Aufgabe zu tun.
 

temi

Top Contributor
Mach es nicht unnötig kompliziert. Die drei Typen aus deinem ersten Beitrag reichen vollkommen aus und die Lösung aus #14 ist fast korrekt.

Du kannst als Typ für eine Variable auch ein Interface angeben.
 

ocsme

Top Contributor
Java:
public class ReadOnly {
    
    ReadStream<String> eingabe;
    
    ReadOnly() {
        eingabe = new IOStream<>();
    }
    
    ReadOnly(File f){
        eingabe = new IOStream<>(f);
    }
    
    @Override
    String read() {
        return eingabe.read();
    }

}


Doch das Problem mit dem Konstruktor bleibt doch gleich. Ich weiß ja immer noch nicht wie IOStream<>() aufgerufen werden sollte.
 

ocsme

Top Contributor
Also reicht das:
Java:
public class ReadOnly {
    
    ReadStream<String> eingabe = new IOStream<>();;
    
    @Override
    String read() {
        return eingabe.read();
    }

}
 

ocsme

Top Contributor
Das soll alles dann sein? :?

Java:
public class ReadOnly {
    
    ReadStream<String> eingabe;
    
 
    String read() {
        return eingabe.read();
    }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Kann mir jemand wörtlich erklären, was in dem Code genau passiert? Java Basics - Anfänger-Themen 1
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
terashy VS Code Project run error Java Basics - Anfänger-Themen 10
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Connect-4-Code analysieren Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
W In alten Code zurück- und dort wieder zurechtfinden? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
T Fehlercode bei code der das Alter ausrechnet Java Basics - Anfänger-Themen 2
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
jhfjeh Strukturgramm in code Java Basics - Anfänger-Themen 11
D Tipps zum Code Java Basics - Anfänger-Themen 24
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
Say do-While Code Ausführung Java Basics - Anfänger-Themen 3
W Rückfrage zur Programmgestaltung (clean code) Java Basics - Anfänger-Themen 12
M intelliJ auf neuem PC, plötzlich kein Code Java Basics - Anfänger-Themen 3
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
C Java boolean Code läuft nicht Java Basics - Anfänger-Themen 5
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
J Größter gemeinsamer Teiler: mein Code Java Basics - Anfänger-Themen 6
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
A Wie könnte man diesen Code kürzer machen ? Java Basics - Anfänger-Themen 7
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
S Hilfe bei Umänderung von Java Code Java Basics - Anfänger-Themen 16
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
R ISBN-10-Code überprüfen Java Basics - Anfänger-Themen 7
I Bitte um Hilfe zu unterstehenden Code Java Basics - Anfänger-Themen 6
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
I HTML Code säubern Java Basics - Anfänger-Themen 4
B Brauche Hilfe zu einem Code Java Basics - Anfänger-Themen 5
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
N Java-Code abwärtskompatibel machen Java Basics - Anfänger-Themen 4
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
S Compiler-Fehler Nicht adressierbarer Code ( Non-addressable code ) Java Basics - Anfänger-Themen 5
Aemulit Java Schaltjahr berechnen Code Java Basics - Anfänger-Themen 7
A Code Problem Java Basics - Anfänger-Themen 6
C Fehler im Code Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
L Ist der Code richtig Java Basics - Anfänger-Themen 3
josfe1234 code vereinfachen Java Basics - Anfänger-Themen 15
nonickatall Ausführbarkeit von Code testen bzw. Remote Debugging Java Basics - Anfänger-Themen 4
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
G Programm Code Java Basics - Anfänger-Themen 5
C Code zusammenfassen Java Basics - Anfänger-Themen 5
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
T Programmablaufsplaninterpretation in Code umformen Java Basics - Anfänger-Themen 1
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
AlexVo String zu Java Anweisung getString("*** java code ***") Java Basics - Anfänger-Themen 19
M ISBN-Code Java Basics - Anfänger-Themen 26
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
S Wie kann ich bei diesem Code erreichen, das als Ergebnis hier 15 herauskommt? Java Basics - Anfänger-Themen 23
N Kann man den Code vereinfachen? Java Basics - Anfänger-Themen 25
marcooooo Code erklären Java Basics - Anfänger-Themen 28
marcooooo Code erklären Java Basics - Anfänger-Themen 4
S Advent of Code Day4 Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
Gaudimagspam Caesars Code entziffern in Java Java Basics - Anfänger-Themen 8
Lukasbsc Wie kann ich meinen Code optimieren? Java Basics - Anfänger-Themen 4
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
T Main startet nicht bei vorgegebenen Code Java Basics - Anfänger-Themen 41
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
M Code nur für Cracks? Crack the Passwort Übung Java Basics - Anfänger-Themen 7
parrot Code entferneJedeZweiteZiffer Java Basics - Anfänger-Themen 6
G Code kürzen Java Basics - Anfänger-Themen 5
Bluedaishi Source Code Signieren Java Basics - Anfänger-Themen 22
L Best Practice Code Refactoring für Methoden mit fast gleicher Aufbau Java Basics - Anfänger-Themen 6
L Best Practice Code refactern Java Basics - Anfänger-Themen 30
G code kürzen Java Basics - Anfänger-Themen 16
A Code umschreiben Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8
X Reverse algorithm engineering (Java code) Java Basics - Anfänger-Themen 6
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Bewertet meinen Code - Part 1 Java Basics - Anfänger-Themen 8
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Hierarchi im code darstellen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben