Supplier: Datagenerering
Slik implementeres den funksjonelle grensesnittet Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Hovedansvaret til metoden get() er å returnere et objekt av typen T uten å ta noen parametere.
Praktisk bruk av Supplier
Supplier brukes ofte i situasjoner der data må genereres ved behov. Dette kan være nyttig for lat initialisering, generering av tilfeldige verdier eller henting av verdier fra en ekstern kilde.
La oss lage et system som genererer tilfeldige passord. Ved å bruke det funksjonelle grensesnittet Supplier, kan du enkelt organisere passordgenerering på forespørsel.
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); } }
Du oppretter en Supplier som genererer et tilfeldig passord på 12 tegn. Lambda-uttrykket inne i Supplier bruker klassen Random til å velge tilfeldige tegn fra en streng.
Metoden get() utløser denne passordgenereringslogikken kun ved behov, noe som muliggjør lat generering av verdier.
Lat generering
Først oppretter du Supplier, men koden inni den kjøres ikke umiddelbart. Dette er en viktig egenskap. I stedet for å utføre logikk med en gang (for eksempel å generere et passord), lagres det bare i Supplier som en instruksjon som skal utføres senere ved behov.
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();
};
Her blir ikke koden inne i Supplier (passordgenerering) kjørt umiddelbart. I stedet angis det: "Når noen ber om det, er dette måten passordet genereres på." Når get() kalles på denne Supplier:
String generatedPassword = passwordSupplier.get();
Først da kjøres koden inne i Supplier, og passordet genereres. Dette er lat evaluering.
Nøkkelansvar
1. Hva gjør Supplier-grensesnittet i Java?
2. Hva skjer hvis du kaller get()-metoden to ganger på det samme Supplier-objektet?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Awesome!
Completion rate improved to 2.33
Supplier: Datagenerering
Sveip for å vise menyen
Slik implementeres den funksjonelle grensesnittet Supplier:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Hovedansvaret til metoden get() er å returnere et objekt av typen T uten å ta noen parametere.
Praktisk bruk av Supplier
Supplier brukes ofte i situasjoner der data må genereres ved behov. Dette kan være nyttig for lat initialisering, generering av tilfeldige verdier eller henting av verdier fra en ekstern kilde.
La oss lage et system som genererer tilfeldige passord. Ved å bruke det funksjonelle grensesnittet Supplier, kan du enkelt organisere passordgenerering på forespørsel.
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); } }
Du oppretter en Supplier som genererer et tilfeldig passord på 12 tegn. Lambda-uttrykket inne i Supplier bruker klassen Random til å velge tilfeldige tegn fra en streng.
Metoden get() utløser denne passordgenereringslogikken kun ved behov, noe som muliggjør lat generering av verdier.
Lat generering
Først oppretter du Supplier, men koden inni den kjøres ikke umiddelbart. Dette er en viktig egenskap. I stedet for å utføre logikk med en gang (for eksempel å generere et passord), lagres det bare i Supplier som en instruksjon som skal utføres senere ved behov.
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();
};
Her blir ikke koden inne i Supplier (passordgenerering) kjørt umiddelbart. I stedet angis det: "Når noen ber om det, er dette måten passordet genereres på." Når get() kalles på denne Supplier:
String generatedPassword = passwordSupplier.get();
Først da kjøres koden inne i Supplier, og passordet genereres. Dette er lat evaluering.
Nøkkelansvar
1. Hva gjør Supplier-grensesnittet i Java?
2. Hva skjer hvis du kaller get()-metoden to ganger på det samme Supplier-objektet?
Takk for tilbakemeldingene dine!