Supplier: Datengenerierung
Swipe um das Menü anzuzeigen
So wird das funktionale Interface Supplier implementiert:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Die Hauptaufgabe der Methode get() besteht darin, ein Objekt vom Typ T zurückzugeben, ohne Parameter zu erwarten.
Praktische Anwendung von Supplier
Supplier wird häufig in Situationen verwendet, in denen Daten bei Bedarf generiert werden müssen. Dies ist nützlich für Lazy Initialization, Erzeugung von Zufallswerten oder Abruf von Werten aus einer externen Quelle.
Es folgt die Erstellung eines Systems zur Generierung von zufälligen Passwörtern. Mit dem Supplier Functional Interface lässt sich die Passwortgenerierung auf Anfrage einfach organisieren.
Main.java
123456789101112131415161718192021222324package com.example; import java.util.Random; import java.util.function.Supplier; public class Main { public static void main(String[] args) { // Supplier for generating random passwords Supplier<String> passwordSupplier = () -> { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()"; StringBuilder password = new StringBuilder(); Random random = new Random(); for (int i = 0; i < 12; i++) { int index = random.nextInt(characters.length()); password.append(characters.charAt(index)); } return password.toString(); }; // Generate and print the random password String generatedPassword = passwordSupplier.get(); System.out.println("Generated password: " + generatedPassword); } }
Ein Supplier, der ein zufälliges Passwort mit 12 Zeichen generiert. Der Lambda-Ausdruck im Supplier verwendet die Klasse Random, um zufällige Zeichen aus einer Zeichenkette auszuwählen.
Die Methode get() löst diese Passwort-Generierungslogik nur bei Bedarf aus und ermöglicht so die verzögerte Generierung von Werten.
Verzögerte Generierung
Zunächst wird der Supplier erstellt, aber der Code darin wird nicht sofort ausgeführt. Dies ist ein wichtiges Merkmal. Anstatt eine Logik sofort auszuführen (z. B. ein Passwort zu generieren), wird sie lediglich im Supplier als Anweisung gespeichert, die erst später bei Bedarf ausgeführt wird.
Supplier<String> passwordSupplier = () -> {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()";
StringBuilder password = new StringBuilder();
Random random = new Random();
for (int i = 0; i < 12; i++) {
int index = random.nextInt(characters.length());
password.append(characters.charAt(index));
}
return password.toString();
};
Hier wird der Code innerhalb des Supplier (Passwortgenerierung) nicht sofort ausgeführt. Stattdessen wird festgelegt: „Wenn jemand danach fragt, wird das Passwort auf diese Weise generiert.“ Wenn nun get() auf diesem Supplier aufgerufen wird:
String generatedPassword = passwordSupplier.get();
Erst dann wird der Code innerhalb des Supplier ausgeführt und das Passwort generiert. Dies ist eine träge Ausführung.
Hauptaufgaben
1. Was macht das Supplier-Interface in Java?
2. Was passiert, wenn Sie die Methode get() zweimal auf demselben Supplier-Objekt aufrufen?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen