Heim  >  Artikel  >  Java  >  Dica Java: Funktionsschnittstelle #

Dica Java: Funktionsschnittstelle #

Barbara Streisand
Barbara StreisandOriginal
2024-09-24 06:25:36197Durchsuche

Dica Java: Functional Interface #

Bei der Entwicklung von Java-Anwendungen kommt es sehr häufig vor, dass Abhängigkeitsinjektionen derselben Bean an verschiedenen Orten und häufig in Beziehungen zwischen Beans erfolgen, wie in den folgenden Beispielen:

@Service
@RequiredArgsConstructor
public class PersonUpdater {

    private final PersonValidator validator;
    private final DocumentService documentService; //outras utilizações no fluxo de atualização

    public Person toUpdate(final Person person) {
        validator.validate(person);

        //...fluxo de atualização de pessoa

        return person;
    }
}
@Component
@RequiredArgsConstructor
public class PersonValidator {

    private final DocumentService documentService;

    public void validate(final Person person) {
        if (person.isAdult() && person.isMale()) {
            final var documents = documentService.getMilitaryDocuments(person.getId());

            //validações necessárias
        }
    }
}

Die Bean DocumentService wurde sowohl in PersonUpdater als auch in PersonValidator injiziert. In PersonUpdater kann die Bean für andere Update-Flows verwendet werden, in PersonValidator ist die Bean jedoch NUR Wird zur Suche nach Militärdokumenten verwendet WENN es sich um die Aktualisierung einer volljährigen männlichen Person handelt. Eine Möglichkeit, das gleiche Ergebnis zu erzielen, sind die folgenden Beispiele:

@Service
@RequiredArgsConstructor
public class PersonUpdater {

    private final PersonValidator validator;
    private final DocumentService documentService; //outras utilizações no fluxo de atualização

    public Person toUpdate(final Person person) {
        validator.validate(person, () -> documentService.getMilitaryDocuments(person.getId()));

        //...fluxo de atualização de pessoa

        return person;
    }
}
@Component
@RequiredArgsConstructor
public class PersonValidator {

    public void validate(final Person person,
                         final Supplier<List<Document>> documentsSupplier) {
        if (person.isAdult() && person.isMale()) {
            final var documents = documentsSupplier.get();

            //validações necessárias
        }
    }
}

Mit Functional Interfaces eröffnen sich vielfältige Möglichkeiten, die Verhaltensweisen einer Java-Anwendung zu nutzen! Sie machen die Verwendung über Methodenargumente (wie im Beispiel) und über Attribute einer Klasse flexibler.

Zusätzlich dazu, dass die Abhängigkeitsinjektion nur an einem Ort erfolgt, haben wir Folgendes:

  • Validatorkopplung verringern
  • Erhöhen Sie die Flexibilität der Methode

Das obige ist der detaillierte Inhalt vonDica Java: Funktionsschnittstelle #. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn