Verkapselung von Klasse?
Hallo Coder-Freunde,
meine Freundin hat in einer Übung für die Uni folgende Java-Aufgabe zu lösen:
// ähnlich java.io.File.listFiles(), gibt aber nicht ein Array sondern ein Filez-Objekt zurück, das die File-Objekte des Directory als List<File> verkapselt
public static Filez create(File directory);
Folgendes haben wir bisher gemacht:
class Filez {
public Filez() {
this.list = new ArrayList<File>();
}
public static Filez create(File directory) { // File directory ist ein Objekt mit dem Pfad zum zu durchsuchenden Verzeichnis.
//List<File> list = new ArrayList<File>();
File[] filesAndDirs = directory.listFiles();
// Daten aus Array werden zu Liste hinzugefügt
for(int i = 0; i < filesAndDirs.length; i++) {
list.add(i, filesAndDirs[i]);
System.out.println(i + ": " + list.get(i));
}
return XXXXX; // Hier hängt's... wie soll eine Liste als Filez-Objekt zurückgegeben werden?
}
}
Mir persönlich erschließt sich die Formulierung "[... gibt ein] Filez-Objekt zurück, das die File-Objekte des Directory als List<File> verkapselt" nicht. Wie soll eine Methode als Returnwert ein Filez-Objekt vom Typ list zurückgeben?
Wir stehen hier auf dem Schlauch, bitte Hilfe!
UPDATE:
Antwort, falls jemand ein ähnliches Problem hat: Konstruktor erstellen!
public Filez() {} oder public Filez(List<File> attrList) { this.list = attrList; }
Return von create() ist dann das gesamte Objekt.
1 Antwort
Moin!
Die einfachste Variante wäre, dass die Klasse nicht statisch ist und direkt als "Wiedergabe-Wert" dient.
Bedeutet: Die Klasse Filez erbt Arraylist<File> und ist damit selber eine erweiterte Arraylist:
import java.io.File;
import java.util.ArrayList;
class Filez extends ArrayList<File> {
public Filez(File directory) {
for (File _x: directory.listFiles()) {
add(_x);
}
}
public void showAllFiles() {
for (File _x: this) {
System.out.println("Der Pfad der Datei " + _x.getName() + " lautet: " + _x.getPath());
}
}
}
Aufruf:
Filez test = new Filez(new File("/home/jacob/Dokumente/Studium/Programmierung/Test Project/src"));
test.showAllFiles();
Output:
Der Pfad der Datei Filez.java lautet: /home/jacob/Dokumente/Studium/Programmierung/Test Project/src/Filez.java
Der Pfad der Datei Main.java lautet: /home/jacob/Dokumente/Studium/Programmierung/Test Project/src/Main.java
Process finished with exit code 0
Grüße, Jacob