1
00:00:02,190 --> 00:00:05,650
Ciao, questo è che non vogliono andare avanti.

2
00:00:05,790 --> 00:00:12,470
Diamo un'occhiata ad un paio di altri importanti vantaggi del formato in cui siamo coinvolti per discutere i due

3
00:00:12,550 --> 00:00:16,450
che vediamo qui, che sono una sorta di benefici fondamentali.

4
00:00:16,450 --> 00:00:20,300
Sappiamo che lo scopo principale del formato è l'interfaccia.

5
00:00:21,470 --> 00:00:22,780
Non che debba essere soddisfatto.

6
00:00:22,780 --> 00:00:27,810
È l'implementazione che i diversi metodi non possono essere metodi astratti.

7
00:00:28,170 --> 00:00:32,980
E se fossero astratti significa che le sottoclassi devono implementarle.

8
00:00:33,210 --> 00:00:34,540
Quindi questa è la ragione non è così.

9
00:00:34,590 --> 00:00:41,200
Questo è il modo in cui il corpo del metodo e il reparto sono qualcosa che sono davvero utili per

10
00:00:41,850 --> 00:00:48,630
il codice dei progettisti API che viene utilizzato al di fuori della loro organizzazione immediata in modo che possano usare metodi diversi

11
00:00:48,630 --> 00:00:50,310
per evolvere le loro interfacce.

12
00:00:50,310 --> 00:00:56,220
Sappiamo anche che i diversi metodi forniscono fondamentalmente un'implementazione predefinita del defacement sui

13
00:00:56,310 --> 00:00:57,080
sottotipi.

14
00:00:57,180 --> 00:01:04,950
Può usarlo gratuitamente o in grado di sovrascriverlo, non che i benefici eliminino solo le classi di utilità in un esempio

15
00:01:05,560 --> 00:01:10,910
di classe di utilità è la classe di una raccolta nel pacchetto Gelada.

16
00:01:11,200 --> 00:01:18,180
È un metodo di utilità molto generico che funziona su strutture di dati che sono implementazioni di poche interfacce

17
00:01:18,180 --> 00:01:19,250
per loro.

18
00:01:19,300 --> 00:01:25,470
Javadoc si impacchetta quasi tutti gli atleti in questa classe non li hanno interfacciati

19
00:01:25,480 --> 00:01:31,730
con il tipo di parametro raccomandato nell'articolo 52 di Java che abbiamo studiato in precedenza.

20
00:01:32,090 --> 00:01:39,160
Ad esempio, esiste un metodo di ordinamento che non ha un elenco in quanto un elenco di pedometer è un'interfaccia in Javadoc.

21
00:01:39,200 --> 00:01:46,150
Puoi impacchettare in modo che questo metodo sia in grado di accettare implementazioni Lisp come un vero test su Grip's

22
00:01:46,150 --> 00:01:49,130
singhiozzando gli elementi della lista in ordine crescente.

23
00:01:49,280 --> 00:01:53,740
Ad esempio, gli elementi sono numeri interi, quindi vengono macellati in ordine crescente.

24
00:01:53,740 --> 00:01:55,740
Nota l'introduzione di diversi metodi.

25
00:01:55,940 --> 00:02:00,530
Invece di incontrare questo tipo, c'è qualcosa che devi lasciare classe B come la classe

26
00:02:00,530 --> 00:02:01,340
delle collezioni.

27
00:02:01,340 --> 00:02:08,010
Può essere incluso come metodo predefinito nella lista in deficit di questo modo, possiamo semplicemente invocare

28
00:02:08,010 --> 00:02:12,160
il metodo cercato sull'oggetto list stesso come mostrato qui.

29
00:02:12,510 --> 00:02:15,990
Sarebbe un'implementazione molto più elegante.

30
00:02:15,990 --> 00:02:23,040
Infatti, con l'interfaccia dell'elenco del 8 luglio in realtà include un metodo di saut predefinito sul metodo

31
00:02:23,040 --> 00:02:28,680
SOC e la classe delle collezioni semplicemente delega alla domanda predefinita nell'interfaccia dell'elenco.

32
00:02:28,680 --> 00:02:35,230
Diamo un'occhiata al codice sorgente del metodo nella classe collections OK.

33
00:02:35,240 --> 00:02:40,280
Eccoci nel sito Web del codice di gruppo e stiamo esaminando il codice sorgente della

34
00:02:40,400 --> 00:02:46,680
classe collections che è una classe di utilità e stiamo esaminando specificamente il codice sorgente nel pacchetto Java 8.

35
00:02:46,950 --> 00:02:54,620
Ed ecco il metodo scusa se ha una lista di parametri singoli e il tipo di parametro è una lista

36
00:02:54,620 --> 00:02:58,250
che è fondamentalmente un'interfaccia e il pacchetto Gelada.

37
00:02:58,310 --> 00:03:05,130
Quindi questo metodo può essere invocato con una qualsiasi delle implementazioni di lista come un altro elenco è un elenco collegato

38
00:03:05,620 --> 00:03:10,020
e puoi semplicemente ignorare tutto questo più grande dei simboli sui simboli Leston.

39
00:03:10,050 --> 00:03:14,980
Sono legati ai generici che saranno discussi in seguito all'interno del corpo del motard.

40
00:03:15,010 --> 00:03:22,480
Stiamo semplicemente delegando a questo metodo chiamato soc che è il metodo predefinito definito nell'interfaccia dell'elenco e puoi

41
00:03:22,910 --> 00:03:25,110
anche ignorare questo argomento nullo.

42
00:03:25,120 --> 00:03:26,750
Non è rilevante qui.

43
00:03:27,170 --> 00:03:30,320
Quindi dall'8 luglio in poi questa delegazione sta accadendo.

44
00:03:30,620 --> 00:03:39,190
Quindi, anche noi possiamo usare direttamente questo metodo o possiamo anche lavorare su questa utility motard per ordinare.

45
00:03:39,620 --> 00:03:46,400
Ma sarebbe molto più elegante invocare direttamente questo in modo che Sabater volesse solo mostrare di

46
00:03:46,620 --> 00:03:55,730
nuovo ciò con un leggero Quindi, in pratica, definendo tali metodi di default nell'interfaccia stessa possiamo eliminare la necessità di avere

47
00:03:55,850 --> 00:03:59,860
tali metodi in una classe di utilità separata.

48
00:04:00,080 --> 00:04:01,420
Quindi questo è il terzo vantaggio.

49
00:04:02,960 --> 00:04:10,460
Il vantaggio anteriore è legato alla funzione e l'interfaccia funzionale di duffus è semplicemente un'interfaccia con esattamente

50
00:04:10,580 --> 00:04:12,350
un metodo astratto.

51
00:04:12,650 --> 00:04:18,260
Quindi è un altro tipo di interfaccia e tutti otteniamo interfacce un po 'più buone che

52
00:04:18,350 --> 00:04:20,050
non dichiarano alcuna statistica.

53
00:04:20,340 --> 00:04:26,440
E abbiamo anche le interfacce regolari che possono dichiarare uno o più metodi e interfacce di funzione.

54
00:04:26,450 --> 00:04:32,720
Come esattamente un metodo astratto guarderanno alle interfacce funzionali e alle classi annidate, nonché quando discuteranno

55
00:04:32,730 --> 00:04:36,760
dell'esperienza lambda che sono state introdotte anche a luglio.

56
00:04:37,160 --> 00:04:43,320
Ma diamo un'occhiata ad una semplice demo che coinvolge un'interfaccia funzione R &amp; B espressione lambda sotto

57
00:04:43,330 --> 00:04:46,600
l'interfaccia C altamente funzionale rimane come un'interfaccia funzionale.

58
00:04:46,670 --> 00:04:54,620
Anche dopo aver aggiunto un metodo predefinito OK, qui abbiamo un'interfaccia funzionale che è stata anche

59
00:04:54,710 --> 00:04:56,810
chiamata funzionale nei deficit.

60
00:04:57,110 --> 00:05:03,800
OK, quindi ha un solo metodo astratto chiamato migliore e questo è commentato e lo vedremo

61
00:05:03,800 --> 00:05:04,910
più avanti.

62
00:05:04,910 --> 00:05:11,420
Ora supponiamo che io lavori per un'azienda e io come progettiamo un'API e questa interfaccia fa parte della

63
00:05:11,480 --> 00:05:12,220
mia API.

64
00:05:12,440 --> 00:05:14,710
OK, quindi ho intenzione di compilare prima

65
00:05:18,430 --> 00:05:19,150
questo sporco.

66
00:05:19,360 --> 00:05:26,110
Si è compilato su, diciamo, do questa particolare API che in-group questa particolare funzione

67
00:05:26,120 --> 00:05:27,900
l'interfaccia si adagia.

68
00:05:28,150 --> 00:05:29,860
Diciamo che questo è il cliente qui.

69
00:05:30,130 --> 00:05:30,400
OK.

70
00:05:30,400 --> 00:05:32,410
Quindi il cliente è un'entità diversa.

71
00:05:32,620 --> 00:05:38,710
OK, questo è il client e il client scriverà effettivamente questo tipo di metodo.

72
00:05:38,830 --> 00:05:43,400
Chiamiamolo un test di slam perché useremo qui espressione lambda.

73
00:05:43,780 --> 00:05:50,500
OK, quindi il metodo più cieco ha questo metodo e il parametro di input è f è l'interfaccia della funzione.

74
00:05:50,630 --> 00:05:52,850
È lo stesso tipo qui.

75
00:05:52,990 --> 00:05:59,030
È l'interfaccia della funzione, quindi i dati di questo particolare parametro del parametro parametrico sono la

76
00:05:59,080 --> 00:06:04,200
funzione in ufficio e l'interfaccia della funzione ha questo metodo metodo test astratto.

77
00:06:04,300 --> 00:06:08,500
Quindi questo particolare metodo funziona davvero meglio.

78
00:06:08,500 --> 00:06:17,590
Quindi questo metodo deve essere passato a un'istanza di interfaccia di funzione tramite questo client sta facendo sta creando un'istanza di questa

79
00:06:17,590 --> 00:06:21,250
classe il nome del desk di processo giusto.

80
00:06:21,420 --> 00:06:25,930
E come osservando l'artista lambda e le espressioni lambda che passano.

81
00:06:25,930 --> 00:06:30,630
Quindi questa è un'espressione lambda e guarderemo più tardi le espressioni lambda.

82
00:06:30,940 --> 00:06:38,790
Ma in sostanza questa è un'implementazione per il miglior metodo nell'interfaccia funzionale.

83
00:06:38,800 --> 00:06:45,220
Ok, quindi questa è considerata un'implementazione e tutto ciò che sta facendo è semplicemente la stampa di quel testo

84
00:06:45,220 --> 00:06:51,370
in Java, il che significa che il miglior metodo è in realtà la stampa di questo messaggio.

85
00:06:51,400 --> 00:06:57,490
Quindi questa espressione lambda è fondamentalmente un'implementazione del metodo migliore.

86
00:06:57,490 --> 00:07:01,540
Quindi andiamo avanti e compiliamo anche sotto questa

87
00:07:05,410 --> 00:07:05,960
sega.

88
00:07:06,030 --> 00:07:07,490
Prince Java e fino.

89
00:07:07,650 --> 00:07:08,340
OK.

90
00:07:08,390 --> 00:07:13,740
Quindi è bello e buono e anche il proprietario di questa particolare classe è felice.

91
00:07:14,120 --> 00:07:18,350
Ma no, dopo un'ora circa voglio introdurre un nuovo metodo.

92
00:07:18,350 --> 00:07:23,310
Così ho creato questo OK è un altro metodo astratto.

93
00:07:23,340 --> 00:07:30,300
Ora sono descritti come questo, quindi anche il loro miglior cliente, il proprietario di

94
00:07:30,350 --> 00:07:40,750
questa classe, è pronto a scaricare l'ultima versione dell'API e lui o lei vuole compilare questo cosponsor del compilatore quando lo compilano.

95
00:07:40,800 --> 00:07:42,160
Non funzionerà.

96
00:07:42,330 --> 00:07:47,180
E la ragione di ciò è incompatibile con i tipi heartline 29.

97
00:07:47,490 --> 00:07:52,690
Quindi qui espressione lambda funzionerebbe solo con un'interfaccia di funzione.

98
00:07:53,040 --> 00:07:55,090
OK perché questo è un po 'questo.

99
00:07:55,140 --> 00:08:00,340
Questo è il corpo del corpo di un particolare metodo che deve essere invocato.

100
00:08:00,420 --> 00:08:02,750
Ma ora l'interfaccia ha due metodi.

101
00:08:02,770 --> 00:08:11,910
Non è più un'interfaccia funzionale, quindi il compilatore non è sicuro di quale delle Plumet questa particolare

102
00:08:12,780 --> 00:08:13,440
funzione.

103
00:08:13,470 --> 00:08:19,890
Questa particolare funzione che è stata impostata è stata inserita da un'espressione lambda che delle due funzioni che

104
00:08:20,100 --> 00:08:24,180
questa espressione lambda rappresentava solo una che aveva solo il metodo.

105
00:08:24,540 --> 00:08:27,780
Ciò fungerebbe da implementazione per il metodo migliore.

106
00:08:27,780 --> 00:08:29,310
Ma ora ha due metodi.

107
00:08:29,350 --> 00:08:36,720
E il compilatore è confuso Mi confonderò su quale dei due abbia incontrato questa

108
00:08:36,720 --> 00:08:40,560
particolare espressione lambda che rappresenterebbe come un'implementazione.

109
00:08:40,560 --> 00:08:44,380
OK, ecco la ragione per cui questo non funzionerà.

110
00:08:44,390 --> 00:08:49,460
Quindi, cosa possiamo fare come Djala 8, possiamo usare il loro metodo predefinito.

111
00:08:49,580 --> 00:08:50,220
Destra.

112
00:08:50,240 --> 00:08:58,610
Quindi se lo faccio un default e non abbiamo il metodo predefinito ha un corpo OK ha qualcuno anticorpo

113
00:08:58,610 --> 00:09:01,340
in questo caso Seubert l'8 luglio.

114
00:09:01,400 --> 00:09:02,610
Questo non sarebbe un problema.

115
00:09:02,720 --> 00:09:09,140
OK, ma prima dell'8 luglio il cliente sarebbe sicuramente furioso che sia stato cambiato e che l'API

116
00:09:09,140 --> 00:09:13,000
sia stata cambiata, ma è stato un processo doloroso.

117
00:09:13,010 --> 00:09:14,220
Prima dell'8 luglio.

118
00:09:14,330 --> 00:09:19,880
Ma ora come progettista di API sono molto più prezioso, sarei molto più sollevato, perché

119
00:09:19,900 --> 00:09:20,820
ci pensava.

120
00:09:20,850 --> 00:09:27,720
Quindi ora se aggiungo questo metodo predefinito intendo solo una compilazione precompilata, viene compilata solo l'interfaccia funzionale che

121
00:09:29,260 --> 00:09:30,400
compila bene.

122
00:09:30,410 --> 00:09:38,020
Ora diciamo che il client ha ordinato l'ultima versione dell'API che ha questa interfaccia ora che compila

123
00:09:38,020 --> 00:09:38,720
bene.

124
00:09:39,130 --> 00:09:42,200
Quindi questa è l'interfaccia in evoluzione.

125
00:09:42,430 --> 00:09:48,640
E questa è l'interfaccia della funzione che rimane come interfaccia di funzione anche dopo l'aggiunta di

126
00:09:48,640 --> 00:09:55,970
un nuovo metodo che è un metodo predefinito, credo o prima, ma che ci consente di mantenere la funzionalità dell'interfaccia funzionale.

127
00:09:56,150 --> 00:09:59,410
OK, quindi l'interfaccia della funzione rimarrà come un dispositivo.

128
00:09:59,530 --> 00:10:00,580
Quindi questo è tutto.

129
00:10:00,580 --> 00:10:05,860
Quindi abbiamo un paio di benefici più interessanti di Lubet.

130
00:10:05,990 --> 00:10:08,040
Questo è il ferro, questo è tutto.

131
00:10:08,140 --> 00:10:08,550
Grazie.
