java.util.function.Function come interfaccia per un oggetto mutabile

0

Ho un'interfaccia con un solo metodo che potrebbe essere sostituito da java.util.function.Function dal JDK:

interface DataModel {
  boolean apply(Map<String, Integer> input);
}

La sostituzione sarebbe

Function<Map<String, Integer>, Boolean>

Tuttavia, mi chiedo se dovrei mantenere questa interfaccia poiché almeno un'implementazione (altre implementazioni potrebbero seguire) contiene uno stato mutabile e non è thread-safe. Una factory crea una nuova istanza per ogni chiamata.

Quindi, mentre tecnicamente possibile, l'interfaccia funzionale potrebbe semanticamente non la soluzione migliore.

La documentazione dell'API non dice qualcosa sulla mutabilità, ma forse violerebbe il principio del minimo stupore o qualche altro tipo di contratto. Esiste un simile contratto?

Andresti con Function o con l'interfaccia personalizzata DataModel e perché?

    
posta deamon 19.12.2017 - 15:33
fonte

1 risposta

1

Vorrei avere un'interfaccia DataModel , per evitare futuri problemi e incomprensioni.
Non sono un purista Imperativo / OO o Funzionale, ma penso che mantenere le cose chiare sia una buona cosa.
@FunctionalInterface s ha i propri scopi, penso che le interfacce personalizzate si adatteranno sempre meglio alle "implementazioni concrete"; li possiedi, quindi puoi estenderli e documentarli quando vuoi o hai bisogno.
Infine, cerca di evitare questo scenario: "una nuova modifica ci costringerà a migrare% implementazioni diFuntion s in BiFunction s, o qualsiasi altra cosa" ; immagina i refactoring ...
Qualcosa che puoi fare è estendere Function , avere la tua copia dell'interfaccia e riutilizzare i metodi predefiniti, se necessario:

public interface DataModel<T, R> extends Function<T, R> {}
    
risposta data 19.12.2017 - 20:29
fonte

Leggi altre domande sui tag