-9

Je demande la raison ou le principe.Comment fonctionne "Stream" dans java8?

Je trouve que la plupart des méthodes de l'interface « Stream » dans Java8 ne sont pas déclarés comme « défaut », donc ils ont pas de méthode body.For exemple:

AnyMatch booléenne (prédicat prédicats);

booléen allMatch (prédicat de prédicat);

Carte de flux (Function mapper);

Comme vous pouvez le voir dans le fichier source Stream.java.

Mais ces méthodes sans corps semblent pouvoir être exécutées dans les programmes Java.

Savez-vous pourquoi?

Merci.

+11

car le flux que vous obtenez de 'stream()' est une implémentation concrète de 'Stream', à savoir une sous-classe de' ReferencePipeline'. Vous ne pouvez pas instancier une interface. C'est essentiellement une question sur le fonctionnement des interfaces ... – Moira

+2

Parce que c'est plus ou moins une 'interface'? –

+3

vous pouvez juste jeter un oeil à l'une des implémentations de la méthode 'stream()', peut être fait en quelques secondes. – luk2302

Répondre

5
abstract class ReferencePipeline<P_IN, P_OUT> 
    extends AbstractPipeline<P_IN, P_OUT, Stream<P_OUT>> 
    implements Stream<P_OUT> ... 

Il est ReferencePipeline qui les met en œuvre. Par exemple:

@Override 
public final boolean anyMatch(Predicate<? super P_OUT> predicate) { 
    return evaluate(MatchOps.makeRef(predicate, MatchOps.MatchKind.ANY)); 
} 
+0

Merci, ami! J'ai trouvé ReferencePipeline dans la source jdk. Mais bizarrement, il ne figure pas sur le document officiel de l'API Java sur le site Web d'Oracle. – xuange

+3

@xuange Ce n'est pas documenté là parce qu'il n'est pas public. – Moira