Toimittaja: Datan Generointi
Tässä on esimerkki siitä, miten Supplier-funktionaalinen rajapinta toteutetaan:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
get()-menetelmän keskeinen tehtävä on palauttaa tyyppiä T oleva olio ilman parametreja.
Supplierin käytännön soveltaminen
Supplier-rajapintaa käytetään usein tilanteissa, joissa data täytyy luoda tarpeen mukaan. Tämä on hyödyllistä esimerkiksi laiskassa alustuksessa, satunnaisarvojen generoinnissa tai arvojen hakemisessa ulkoisesta lähteestä.
Luodaan järjestelmä, joka generoi satunnaisia salasanoja. Käyttämällä Supplier-funktionaalista rajapintaa voidaan helposti järjestää salasanojen generointi pyynnöstä.
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); } }
Luodaan Supplier, joka tuottaa satunnaisen salasanan ja jonka pituus on 12 merkkiä. Supplier-rajapinnan sisällä oleva lambda-lauseke käyttää Random-luokkaa valitakseen satunnaisia merkkejä merkkijonosta.
get()-metodi käynnistää tämän salasanan generointilogiikan vain tarvittaessa, mahdollistaen arvojen laiskan generoinnin.
Laiska generointi
Aluksi luodaan Supplier, mutta sen sisällä oleva koodi ei suoriteta välittömästi. Tämä on tärkeä ominaisuus. Sen sijaan, että jokin logiikka suoritettaisiin heti (esim. salasanan generointi), se tallennetaan Supplier-olioon ohjeena, joka suoritetaan myöhemmin tarvittaessa.
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();
};
Tässä Supplier-rajapinnan sisällä oleva koodi (salasanan generointi) ei suoriteta välittömästi. Sen sijaan määritellään, "Kun joku pyytää, näin salasana generoidaan." Kun kutsutaan get()-metodia tälle Supplier-oliolle:
String generatedPassword = passwordSupplier.get();
Vasta sitten koodi suoritetaan Supplier-rajapinnassa, ja salasana luodaan. Tämä on laiskaa suorittamista.
Keskeiset vastuualueet
1. Mitä Supplier-rajapinta tekee Javassa?
2. Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 2.33
Toimittaja: Datan Generointi
Pyyhkäise näyttääksesi valikon
Tässä on esimerkki siitä, miten Supplier-funktionaalinen rajapinta toteutetaan:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
get()-menetelmän keskeinen tehtävä on palauttaa tyyppiä T oleva olio ilman parametreja.
Supplierin käytännön soveltaminen
Supplier-rajapintaa käytetään usein tilanteissa, joissa data täytyy luoda tarpeen mukaan. Tämä on hyödyllistä esimerkiksi laiskassa alustuksessa, satunnaisarvojen generoinnissa tai arvojen hakemisessa ulkoisesta lähteestä.
Luodaan järjestelmä, joka generoi satunnaisia salasanoja. Käyttämällä Supplier-funktionaalista rajapintaa voidaan helposti järjestää salasanojen generointi pyynnöstä.
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); } }
Luodaan Supplier, joka tuottaa satunnaisen salasanan ja jonka pituus on 12 merkkiä. Supplier-rajapinnan sisällä oleva lambda-lauseke käyttää Random-luokkaa valitakseen satunnaisia merkkejä merkkijonosta.
get()-metodi käynnistää tämän salasanan generointilogiikan vain tarvittaessa, mahdollistaen arvojen laiskan generoinnin.
Laiska generointi
Aluksi luodaan Supplier, mutta sen sisällä oleva koodi ei suoriteta välittömästi. Tämä on tärkeä ominaisuus. Sen sijaan, että jokin logiikka suoritettaisiin heti (esim. salasanan generointi), se tallennetaan Supplier-olioon ohjeena, joka suoritetaan myöhemmin tarvittaessa.
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();
};
Tässä Supplier-rajapinnan sisällä oleva koodi (salasanan generointi) ei suoriteta välittömästi. Sen sijaan määritellään, "Kun joku pyytää, näin salasana generoidaan." Kun kutsutaan get()-metodia tälle Supplier-oliolle:
String generatedPassword = passwordSupplier.get();
Vasta sitten koodi suoritetaan Supplier-rajapinnassa, ja salasana luodaan. Tämä on laiskaa suorittamista.
Keskeiset vastuualueet
1. Mitä Supplier-rajapinta tekee Javassa?
2. Mitä tapahtuu, jos kutsut get()-metodia kahdesti samalla Supplier-oliolla?
Kiitos palautteestasi!