Generics og funktionelle interfaces
I denne øvelse skal du bygge et generisk lagersystem med interfaces og klasser. Målet er en fleksibel løsning, der kan gemme og hente data af forskellige typer med typesikkerhed.
1.1 Lav et generisk storage-interface
Lav et interface DataStorage<T> med metoder til at gemme og hente data af typen T.
interface DataStorage<T> {
String store(T data); // return a unique ID for the stored data or the filename
T retrieve(String source); // retrieve data from the specified source (like a file or database table or ID)
}
1.2 Implementér storage-klasser
Lav tre klasser, der implementerer DataStorage:
MemoryStorage<T>: gemmer i hukommelsenFileStorage<T>: gemmer i en filDatabaseStorage<T>: gemmer i en database (valgfri, hvis tid)
Brug passende datastrukturer (instansvariable, filer eller DB-tilslutning).
Start evt. simpelt ved at gemme til/fra en streng. Har du tid, så sørg for type-sikker serialisering. Se hints om fil-serialisering.
1.3 Main-applikation
Lav en main, der opretter instanser af hver storage-klasse og viser gem/hent af forskellige typer.
public class DataStorageApp {
public static void main(String[] args) {
DataStorage<String> memoryStorage = new MemoryStorage<>();
memoryStorage.store("Hello, world!");
String retrievedString = memoryStorage.retrieve(null);
DataStorage<Employee> fileStorage = new FileStorage<>();
String filename = fileStorage.store(new Employee("John", 30));
Employee retrievedInt = fileStorage.retrieve(filename);
// Create and demonstrate DatabaseStorage
}
}
Øvelsen giver praksis i generics i både interfaces og klasser, og i at designe en type-sikker lagermodel.
Nu skal de funktionelle interfaces fra java.util.function bruges: Predicate, Consumer, Supplier, Function.
2.1 Forklar til din sidemakker hvad Predicate, Consumer, Supplier, Function gør.
2.2 Brug Predicate til at filtrere en liste af heltal, så kun dem der kan deles med 7 bliver tilbage.
2.3 Brug Supplier til at skabe en liste af Employee-objekter ud fra en navneliste som Arrays.asList("John", "Jane", "Jack", "Joe", "Jill").
Hint: Se Supplier-eksempler.
2.4 Brug Consumer til at printe listen af Employees.
2.5 Brug Function til at omdanne en Employee-liste til en navneliste.
2.6 Brug Predicate til at tjekke om en medarbejder er over 18.