Ciao, questo è che non vogliono andare avanti.
Diamo un'occhiata ad un paio di altri importanti vantaggi del formato in cui siamo coinvolti per discutere i due
che vediamo qui, che sono una sorta di benefici fondamentali.
Sappiamo che lo scopo principale del formato è l'interfaccia.
Non che debba essere soddisfatto.
È l'implementazione che i diversi metodi non possono essere metodi astratti.
E se fossero astratti significa che le sottoclassi devono implementarle.
Quindi questa è la ragione non è così.
Questo è il modo in cui il corpo del metodo e il reparto sono qualcosa che sono davvero utili per
il codice dei progettisti API che viene utilizzato al di fuori della loro organizzazione immediata in modo che possano usare metodi diversi
per evolvere le loro interfacce.
Sappiamo anche che i diversi metodi forniscono fondamentalmente un'implementazione predefinita del defacement sui
sottotipi.
Può usarlo gratuitamente o in grado di sovrascriverlo, non che i benefici eliminino solo le classi di utilità in un esempio
di classe di utilità è la classe di una raccolta nel pacchetto Gelada.
È un metodo di utilità molto generico che funziona su strutture di dati che sono implementazioni di poche interfacce
per loro.
Javadoc si impacchetta quasi tutti gli atleti in questa classe non li hanno interfacciati
con il tipo di parametro raccomandato nell'articolo 52 di Java che abbiamo studiato in precedenza.
Ad esempio, esiste un metodo di ordinamento che non ha un elenco in quanto un elenco di pedometer è un'interfaccia in Javadoc.
Puoi impacchettare in modo che questo metodo sia in grado di accettare implementazioni Lisp come un vero test su Grip's
singhiozzando gli elementi della lista in ordine crescente.
Ad esempio, gli elementi sono numeri interi, quindi vengono macellati in ordine crescente.
Nota l'introduzione di diversi metodi.
Invece di incontrare questo tipo, c'è qualcosa che devi lasciare classe B come la classe
delle collezioni.
Può essere incluso come metodo predefinito nella lista in deficit di questo modo, possiamo semplicemente invocare
il metodo cercato sull'oggetto list stesso come mostrato qui.
Sarebbe un'implementazione molto più elegante.
Infatti, con l'interfaccia dell'elenco del 8 luglio in realtà include un metodo di saut predefinito sul metodo
SOC e la classe delle collezioni semplicemente delega alla domanda predefinita nell'interfaccia dell'elenco.
Diamo un'occhiata al codice sorgente del metodo nella classe collections OK.
Eccoci nel sito Web del codice di gruppo e stiamo esaminando il codice sorgente della
classe collections che è una classe di utilità e stiamo esaminando specificamente il codice sorgente nel pacchetto Java 8.
Ed ecco il metodo scusa se ha una lista di parametri singoli e il tipo di parametro è una lista
che è fondamentalmente un'interfaccia e il pacchetto Gelada.
Quindi questo metodo può essere invocato con una qualsiasi delle implementazioni di lista come un altro elenco è un elenco collegato
e puoi semplicemente ignorare tutto questo più grande dei simboli sui simboli Leston.
Sono legati ai generici che saranno discussi in seguito all'interno del corpo del motard.
Stiamo semplicemente delegando a questo metodo chiamato soc che è il metodo predefinito definito nell'interfaccia dell'elenco e puoi
anche ignorare questo argomento nullo.
Non è rilevante qui.
Quindi dall'8 luglio in poi questa delegazione sta accadendo.
Quindi, anche noi possiamo usare direttamente questo metodo o possiamo anche lavorare su questa utility motard per ordinare.
Ma sarebbe molto più elegante invocare direttamente questo in modo che Sabater volesse solo mostrare di
nuovo ciò con un leggero Quindi, in pratica, definendo tali metodi di default nell'interfaccia stessa possiamo eliminare la necessità di avere
tali metodi in una classe di utilità separata.
Quindi questo è il terzo vantaggio.
Il vantaggio anteriore è legato alla funzione e l'interfaccia funzionale di duffus è semplicemente un'interfaccia con esattamente
un metodo astratto.
Quindi è un altro tipo di interfaccia e tutti otteniamo interfacce un po 'più buone che
non dichiarano alcuna statistica.
E abbiamo anche le interfacce regolari che possono dichiarare uno o più metodi e interfacce di funzione.
Come esattamente un metodo astratto guarderanno alle interfacce funzionali e alle classi annidate, nonché quando discuteranno
dell'esperienza lambda che sono state introdotte anche a luglio.
Ma diamo un'occhiata ad una semplice demo che coinvolge un'interfaccia funzione R & B espressione lambda sotto
l'interfaccia C altamente funzionale rimane come un'interfaccia funzionale.
Anche dopo aver aggiunto un metodo predefinito OK, qui abbiamo un'interfaccia funzionale che è stata anche
chiamata funzionale nei deficit.
OK, quindi ha un solo metodo astratto chiamato migliore e questo è commentato e lo vedremo
più avanti.
Ora supponiamo che io lavori per un'azienda e io come progettiamo un'API e questa interfaccia fa parte della
mia API.
OK, quindi ho intenzione di compilare prima
questo sporco.
Si è compilato su, diciamo, do questa particolare API che in-group questa particolare funzione
l'interfaccia si adagia.
Diciamo che questo è il cliente qui.
OK.
Quindi il cliente è un'entità diversa.
OK, questo è il client e il client scriverà effettivamente questo tipo di metodo.
Chiamiamolo un test di slam perché useremo qui espressione lambda.
OK, quindi il metodo più cieco ha questo metodo e il parametro di input è f è l'interfaccia della funzione.
È lo stesso tipo qui.
È l'interfaccia della funzione, quindi i dati di questo particolare parametro del parametro parametrico sono la
funzione in ufficio e l'interfaccia della funzione ha questo metodo metodo test astratto.
Quindi questo particolare metodo funziona davvero meglio.
Quindi questo metodo deve essere passato a un'istanza di interfaccia di funzione tramite questo client sta facendo sta creando un'istanza di questa
classe il nome del desk di processo giusto.
E come osservando l'artista lambda e le espressioni lambda che passano.
Quindi questa è un'espressione lambda e guarderemo più tardi le espressioni lambda.
Ma in sostanza questa è un'implementazione per il miglior metodo nell'interfaccia funzionale.
Ok, quindi questa è considerata un'implementazione e tutto ciò che sta facendo è semplicemente la stampa di quel testo
in Java, il che significa che il miglior metodo è in realtà la stampa di questo messaggio.
Quindi questa espressione lambda è fondamentalmente un'implementazione del metodo migliore.
Quindi andiamo avanti e compiliamo anche sotto questa
sega.
Prince Java e fino.
OK.
Quindi è bello e buono e anche il proprietario di questa particolare classe è felice.
Ma no, dopo un'ora circa voglio introdurre un nuovo metodo.
Così ho creato questo OK è un altro metodo astratto.
Ora sono descritti come questo, quindi anche il loro miglior cliente, il proprietario di
questa classe, è pronto a scaricare l'ultima versione dell'API e lui o lei vuole compilare questo cosponsor del compilatore quando lo compilano.
Non funzionerà.
E la ragione di ciò è incompatibile con i tipi heartline 29.
Quindi qui espressione lambda funzionerebbe solo con un'interfaccia di funzione.
OK perché questo è un po 'questo.
Questo è il corpo del corpo di un particolare metodo che deve essere invocato.
Ma ora l'interfaccia ha due metodi.
Non è più un'interfaccia funzionale, quindi il compilatore non è sicuro di quale delle Plumet questa particolare
funzione.
Questa particolare funzione che è stata impostata è stata inserita da un'espressione lambda che delle due funzioni che
questa espressione lambda rappresentava solo una che aveva solo il metodo.
Ciò fungerebbe da implementazione per il metodo migliore.
Ma ora ha due metodi.
E il compilatore è confuso Mi confonderò su quale dei due abbia incontrato questa
particolare espressione lambda che rappresenterebbe come un'implementazione.
OK, ecco la ragione per cui questo non funzionerà.
Quindi, cosa possiamo fare come Djala 8, possiamo usare il loro metodo predefinito.
Destra.
Quindi se lo faccio un default e non abbiamo il metodo predefinito ha un corpo OK ha qualcuno anticorpo
in questo caso Seubert l'8 luglio.
Questo non sarebbe un problema.
OK, ma prima dell'8 luglio il cliente sarebbe sicuramente furioso che sia stato cambiato e che l'API
sia stata cambiata, ma è stato un processo doloroso.
Prima dell'8 luglio.
Ma ora come progettista di API sono molto più prezioso, sarei molto più sollevato, perché
ci pensava.
Quindi ora se aggiungo questo metodo predefinito intendo solo una compilazione precompilata, viene compilata solo l'interfaccia funzionale che
compila bene.
Ora diciamo che il client ha ordinato l'ultima versione dell'API che ha questa interfaccia ora che compila
bene.
Quindi questa è l'interfaccia in evoluzione.
E questa è l'interfaccia della funzione che rimane come interfaccia di funzione anche dopo l'aggiunta di
un nuovo metodo che è un metodo predefinito, credo o prima, ma che ci consente di mantenere la funzionalità dell'interfaccia funzionale.
OK, quindi l'interfaccia della funzione rimarrà come un dispositivo.
Quindi questo è tutto.
Quindi abbiamo un paio di benefici più interessanti di Lubet.
Questo è il ferro, questo è tutto.
Grazie.