Supplier: Gegevensgeneratie
Veeg om het menu te tonen
Hier volgt de implementatie van de functionele interface Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
De belangrijkste verantwoordelijkheid van de methode get() is het teruggeven van een object van het type T zonder parameters te accepteren.
Praktisch gebruik van Supplier
Supplier wordt vaak gebruikt in situaties waarin gegevens op aanvraag moeten worden gegenereerd. Dit is nuttig voor luie initialisatie, het genereren van willekeurige waarden of het ophalen van waarden uit een externe bron.
Laten we een systeem maken dat willekeurige wachtwoorden genereert. Met behulp van de Supplier functionele interface kan wachtwoordgeneratie op aanvraag eenvoudig worden georganiseerd.
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); } }
Een Supplier wordt aangemaakt die een willekeurig wachtwoord van 12 tekens genereert. De lambda-expressie binnen de Supplier gebruikt de klasse Random om willekeurige tekens uit een string te selecteren.
De methode get() activeert deze wachtwoordgeneratielogica alleen wanneer dat nodig is, waardoor luie generatie van waarden mogelijk wordt gemaakt.
Luie generatie
Aanvankelijk wordt de Supplier aangemaakt, maar de code daarin wordt niet direct uitgevoerd. Dit is een belangrijke eigenschap. In plaats van direct logica uit te voeren (bijvoorbeeld het genereren van een wachtwoord), wordt deze alleen vastgelegd in de Supplier als een instructie die later wordt uitgevoerd wanneer dat nodig is.
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 wordt de code binnen de Supplier (wachtwoordgeneratie) niet direct uitgevoerd. In plaats daarvan geef je aan: "Wanneer iemand erom vraagt, wordt het wachtwoord op deze manier gegenereerd." Wanneer je nu get() aanroept op deze Supplier:
String generatedPassword = passwordSupplier.get();
Pas dan wordt de code binnen de Supplier uitgevoerd en wordt het wachtwoord gegenereerd. Dit is luie uitvoering.
Belangrijkste verantwoordelijkheden
1. Wat doet de interface Supplier in Java?
2. Wat gebeurt er als je de methode get() twee keer aanroept op hetzelfde Supplier-object?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.