1
00:00:02,150 --> 00:00:02,950
Ciao.

2
00:00:02,960 --> 00:00:04,070
Questa è la Lulu romana.

3
00:00:04,160 --> 00:00:05,280
E bentornato.

4
00:00:05,330 --> 00:00:09,410
Quindi non abbiamo finito con i generici, che è stato un capitolo piuttosto lungo.

5
00:00:09,410 --> 00:00:11,420
È stata una copertura molto completa.

6
00:00:11,540 --> 00:00:19,550
E ora andiamo avanti e rivediamo rapidamente tutte le funzionalità importanti di cui abbiamo discusso in questo capitolo.

7
00:00:19,620 --> 00:00:26,790
Si può ricordare che la motivazione principale per l'introduzione dei generici era quella di garantire la sicurezza dei tipi in fase

8
00:00:26,790 --> 00:00:30,220
di compilazione prima dell'introduzione dei generici in Java 5.

9
00:00:30,390 --> 00:00:37,560
Esisteva sempre il rischio di incorrere in eccezioni di runtime correlate alla sicurezza dei tipi.

10
00:00:37,650 --> 00:00:46,310
Quindi generics è puramente un concetto di tempo di compilazione e non ci sono generici in fase di runtime.

11
00:00:46,330 --> 00:00:53,260
Puoi ricordare questo esempio sin dalla prima lezione e diciamo che è così che una classe

12
00:00:53,260 --> 00:01:01,180
e i pre generici sembrerebbero come la classe store qui può essere usata per archiviare e recuperare qualsiasi oggetto.

13
00:01:01,180 --> 00:01:08,170
Quindi il parametro del metodo del metodo set è di tipo oggetto il tipo di getter

14
00:01:08,170 --> 00:01:16,280
sottoscritto è anche fuori oggetto come allora abbiamo lo sviluppatore John che lancia un'istanza morta dal barattolo del pacchetto oscuro.

15
00:01:16,730 --> 00:01:24,020
E recupera anche lo stesso oggetto in un secondo momento e un luogo in cui viene lanciato per

16
00:01:24,710 --> 00:01:33,840
convertirlo da un oggetto ad oggi poiché il metodo restituisce un oggetto successivo Anita utilizza la stessa istanza memorizzata che John ha creato e

17
00:01:33,870 --> 00:01:41,210
ricerca l'oggetto morto archiviato ma imposta un'istanza di data da Joe non hai creato un pacchetto piuttosto che da

18
00:01:41,220 --> 00:01:49,240
Java, non un pacchetto di salvataggio e in seguito John ha ottenuto ancora una volta la stessa istanza memorizzata e recupera

19
00:01:49,240 --> 00:01:50,270
l'oggetto Date.

20
00:01:50,500 --> 00:01:57,640
E applica anche il cast di date da Java non SDL poiché era quello che aveva usato in precedenza

21
00:01:57,730 --> 00:02:06,940
durante la memorizzazione dell'istanza morta e ciò darebbe un'eccezione di cast di classe in fase di esecuzione poiché l'oggetto data ora proviene da Java non

22
00:02:06,940 --> 00:02:15,660
da Udall che non può battere l'incantatore al punto Java oscurato o fatto Java è un linguaggio di tipo sicuro quindi è stata

23
00:02:15,660 --> 00:02:17,190
generata questa eccezione.

24
00:02:18,150 --> 00:02:25,830
Quindi i progettisti del linguaggio hanno voluto identificare questo tipo di problemi al momento della compilazione stessa e quindi i

25
00:02:25,950 --> 00:02:34,170
generici introdotti, quindi ecco la stessa classe di negozio ma con i generici qui digita il parametro da usare che accede anche

26
00:02:34,170 --> 00:02:40,830
a quel tipo per il parametro del metodo nel metodo set e anche come tipo di ritorno

27
00:02:41,900 --> 00:02:47,400
per ottenere Lui è anche il tipo per esempio variabile a ed ecco John.

28
00:02:47,410 --> 00:02:54,640
E si chiama doppio uso di generici sul suo codice non si compila nemmeno in quanto non può impostare un lavoro o no.

29
00:02:54,640 --> 00:03:02,890
Pensi che Dio abbia archiviato l'istanza può prendere solo un'istanza morta da Java e non dalla scuola come è

30
00:03:03,010 --> 00:03:06,940
stato specificato quando è stato creato da John.

31
00:03:07,080 --> 00:03:15,060
Ora un altro utente Raj può utilizzare lo stesso class store generico per archiviare un'istanza di libro che può solo

32
00:03:15,120 --> 00:03:23,700
archiviare e recuperare un'istanza di libro o uno dei suoi sottotipi, quindi con generici otteniamo la sicurezza del tipo di tempo di

33
00:03:23,700 --> 00:03:30,840
compilazione e come aggiunta al codice è anche più pulito in quanto non è necessario applicare alcun

34
00:03:31,380 --> 00:03:39,090
compilatore CAS esplicito, ma per noi il codice è anche espressivo poiché l'intenzione dei programmatori è molto chiara come

35
00:03:39,090 --> 00:03:47,370
archiviare l'istanza morta o un codice di istanza del libro è anche generico nel senso che il codice client può archiviare

36
00:03:47,370 --> 00:03:51,100
qualsiasi tipo di dati come libro o data.

37
00:03:51,360 --> 00:03:58,740
Naturalmente ciò che può essere limitato usando il limite dei parametri, per lo più generici, si incontrano solo classi

38
00:03:58,750 --> 00:04:03,550
di tipo contenitore bit che vengono visualizzate con il framework delle raccolte.

39
00:04:03,750 --> 00:04:12,820
Potrebbe non essere molto comune per te scrivere classi così generiche, dipende solo dal tuo progetto, quindi tipi

40
00:04:12,820 --> 00:04:21,510
generici freeware quando possibile come questo elemento da Java affettivo come ma i programmatori inesperti possono ancora

41
00:04:21,510 --> 00:04:29,280
creare tipi di strade compromettendo il beneficio della genetica il solo compilatore tipo di sicurezza.

42
00:04:29,280 --> 00:04:32,790
Quindi questo articolo vuole che non lo facciamo.

43
00:04:32,790 --> 00:04:40,500
Uno dei motivi per cui gli sviluppatori potrebbero essere tentati di usare pipe brevi soprattutto per i parametri del

44
00:04:40,680 --> 00:04:48,990
metodo è perché non sanno o non si preoccupano di ciò che l'argomento USA potrebbe archiviare in un tale tipo di situazione.

45
00:04:48,990 --> 00:04:56,100
Invece di usare un tipo errato si può usare un tipo di carattere jolly senza limiti che offre il vantaggio

46
00:04:56,100 --> 00:05:05,620
della sicurezza del tipo di tempo di compilazione che non si ottiene con il tipo di roccia rossa. Ecco un esempio di utilizzo di un carattere

47
00:05:05,690 --> 00:05:07,010
jolly senza limiti.

48
00:05:07,110 --> 00:05:15,890
Qui possiamo passare un elenco contenente qualsiasi tipo di elemento e senza dubbio il carattere jolly può essere

49
00:05:15,990 --> 00:05:20,330
utilizzato solo come argomento pipe non come parametro.

50
00:05:20,340 --> 00:05:27,270
Successivamente la domanda è: perché non usare semplicemente l'oggetto come argomento di tipo anziché un carattere jolly, poiché l'oggetto è la

51
00:05:27,270 --> 00:05:32,070
superclasse di tutte le classi e quindi può essere assegnato a qualsiasi oggetto.

52
00:05:33,660 --> 00:05:40,860
Ma la limitazione con l'uso dell'oggetto come argomento di tipo è che puoi assegnare solo un'istanza che ha anche oggetto come

53
00:05:40,860 --> 00:05:49,120
argomento di tipo che è che non puoi assegnare qualcosa come un archivio di stringhe e sappiamo che ciò è dovuto a proprietà invarianti che

54
00:05:49,120 --> 00:05:55,360
potrebbero generare un eccesso generico che aiuta anche a compilare la sicurezza del tipo di tempo, ma con

55
00:05:57,430 --> 00:06:04,580
la carta bianca possiamo assegnare un'istanza di qualsiasi tipo che è memorizzata da una stringa o un archivio di numeri interi

56
00:06:04,610 --> 00:06:06,230
o qualsiasi altra cosa.

57
00:06:06,230 --> 00:06:12,340
Quindi questo è un vantaggio dell'uso di un jolly illimitato o di uno che utilizza l'oggetto come argomento di tipo.

58
00:06:14,610 --> 00:06:21,390
Ed ecco il libro delle proprietà invariante è una scorta di segnalibro ma l'elenco dei libri non è un sottotipo di questa

59
00:06:21,480 --> 00:06:22,010
roba.

60
00:06:22,020 --> 00:06:27,750
Aggiungi segnalibro per lo stesso tipo di argomento.

61
00:06:27,870 --> 00:06:30,290
Eredità di tipi genetici.

62
00:06:30,850 --> 00:06:37,620
Quindi, se l'argomento tipo è un segnalibro, un idealista o un segnalibro può essere assegnato al suo elenco o segnalibro come

63
00:06:37,920 --> 00:06:38,780
nostro elenco.

64
00:06:38,790 --> 00:06:46,260
È questo un tipo di elenco può essere un po 'confuso, ma tieni presente che nelle varianti i tipi di argomenti

65
00:06:46,260 --> 00:06:47,100
sono diversi.

66
00:06:49,340 --> 00:06:53,150
Questo è stato l'esempio che abbiamo visto sul perché è necessario l'invariante.

67
00:06:53,150 --> 00:06:58,620
Questo esempio spiega cosa succede se è consentito l'invariante con i generici.

68
00:06:58,690 --> 00:07:04,790
Qui stiamo passando un elenco di oggetti come argomento ma nel metodo un oggetto filmato viene aggiunto a

69
00:07:04,790 --> 00:07:05,710
questo elenco.

70
00:07:05,970 --> 00:07:12,980
E ciò potrebbe comportare un'eccezione di runtime poiché il codice di richiamo si aspetta sempre che

71
00:07:13,040 --> 00:07:15,750
l'elenco contenga solo oggetti libro.

72
00:07:15,920 --> 00:07:24,000
Quindi, nelle varianti, è necessario sapere cosa discuteremo in seguito di come l'invariante sia limitato, sebbene in alcuni

73
00:07:24,000 --> 00:07:29,480
scenari innocui, sebbene garantisca la sicurezza del tipo di tempo di compilazione.

74
00:07:29,490 --> 00:07:34,440
Un esempio del metodo di visualizzazione che prenderebbe un elenco di segnalibri su una visualizzazione più semplice.

75
00:07:35,010 --> 00:07:42,180
Quindi nessuna intenzione di inserire un tipo errato di elementi, ma purtroppo a causa della varianza non possiamo passare

76
00:07:42,420 --> 00:07:49,420
né un elenco fuori libro o un elenco di più noi in questo caso, quindi stanno lavorando su scenari

77
00:07:49,420 --> 00:07:58,130
fossili è usare un jolly accoppiato o un generico con un parametro di tipo bond ma dobbiamo garantire la sicurezza del tipo 2

78
00:07:58,190 --> 00:08:03,960
e quindi il compilatore ha questa limitazione su un jolly rosso con limite superiore.

79
00:08:04,970 --> 00:08:12,280
Non possiamo invocare metodi che utilizzano parametri di tipo a livello di classe con alcun argomento tranne nessuno.

80
00:08:12,590 --> 00:08:18,820
Altrimenti c'è sempre la possibilità di invocare tali metodi e dati passati che potrebbero rompere i tubi.

81
00:08:20,180 --> 00:08:28,520
Quindi se invochiamo tali metodi con qualcosa di diverso da null otteniamo un errore del compilatore per quanto riguarda invariante.

82
00:08:28,530 --> 00:08:34,770
Abbiamo anche discusso dello scenario in cui vorremmo consumare dati ed essere ancora in grado

83
00:08:34,830 --> 00:08:42,410
di analizzare diversi argomenti, abbiamo detto che per questo è possibile utilizzare un jolly con legame inferiore, ad esempio

84
00:08:42,410 --> 00:08:50,050
qui l'aggregato del metodo utilizza un tipo di jolly con legame inferiore per aggregare i dati tuttavia può essere invocato.

85
00:08:50,240 --> 00:08:57,920
È un elenco di segnalibri o un elenco di oggetti che l'oggetto è il super tipo di segnalibro ma non può essere

86
00:08:57,920 --> 00:09:07,170
invocato con un elenco di alcuni tipi di segnalibro e qui c'è la restrizione del compilatore che potrebbe fare in modo che un tipo di carattere

87
00:09:07,170 --> 00:09:14,490
jolly legato inferiore agisca come consumatore dei dati e allo stesso tempo garantisce che la sicurezza del tipo di tempo

88
00:09:14,490 --> 00:09:16,500
di compilazione non sia compromessa.

89
00:09:17,400 --> 00:09:26,010
Quindi la regola dice che possiamo invocare metodi che usano solo il parametro di tipo di classe solo se l'argomento

90
00:09:26,010 --> 00:09:35,440
è fuori dal tipo di legame più basso o da uno dei suoi sottotipi e discutiamo anche di questo importante e interessante articolo

91
00:09:35,470 --> 00:09:40,960
commenti virtuali usando i caratteri jolly legati per aumentare la flessibilità dell'API.

92
00:09:41,040 --> 00:09:50,220
Indica che se questo tipo di parametro produce dati, utilizza l'eccellenza e se il tipo di parametri consuma dati,

93
00:09:50,280 --> 00:10:00,090
usa super se il tipo di parametro produce dati ma non conosce o si preoccupa dell'argomento di tipo usato jolly illimitato.

94
00:10:01,180 --> 00:10:08,410
Tieni presente che il carattere jolly non associato è lo stesso del limite superiore e del

95
00:10:08,410 --> 00:10:17,300
carattere jolly ma con l'oggetto come legame invisibile se i parametri digitano produttori e consumano dati, devi utilizzare la corrispondenza esatta.

96
00:10:17,330 --> 00:10:25,810
Inoltre puoi ricordare il testo mnemonico e abbiamo anche alcune restrizioni che vanno di pari passo con i generici.

97
00:10:25,880 --> 00:10:31,790
Uno di questi è che il parametro del tipo di livello di classe non può essere utilizzato in un contesto statico.

98
00:10:31,790 --> 00:10:37,050
Se il nostro metodo statico richiede genericità, allora possiamo definire un metodo generico.

99
00:10:39,030 --> 00:10:42,140
Un'altra restrizione è che l'argomento type non può essere a.

100
00:10:44,100 --> 00:10:52,820
Su generici all'arresto, inoltre, non si mescolano quando a causa di problemi di sicurezza del tipo e tale tipo di sovraccarico del

101
00:10:52,940 --> 00:10:59,640
metodo non funziona con i metodi finirebbe con la stessa firma dopo la cancellazione del tipo.

102
00:10:59,710 --> 00:11:05,920
Ricorda che la cancellazione del tipo aveva diffuso l'interoperabilità con il codice legacy.

103
00:11:06,020 --> 00:11:12,950
Tieni presente che con la cancellazione del tipo quel parametro di tipo verrebbe sostituito con l'oggetto o

104
00:11:12,950 --> 00:11:23,130
la bomba più a sinistra se esistessero una o più bombe e infine ringraziamo il nostro fantastico compilatore java per aver fatto tutte queste grandi cose

105
00:11:23,190 --> 00:11:30,630
per noi, assicura la sicurezza del tipo di tempo di compilazione nella classe di ricerca esegue l'inferenza del tipo

106
00:11:30,900 --> 00:11:33,290
e infine digita la cancellazione.

107
00:11:33,300 --> 00:11:36,620
Making crea genera un concetto di tempo puramente compilativo.

108
00:11:38,000 --> 00:11:42,280
Quindi questa è la fine di questo capitolo e spero che ti sia piaciuto conoscere i generici.

109
00:11:42,470 --> 00:11:49,700
E come menzionato nella lezione introduttiva, se necessario, per rivedere i concetti dei generici una volta alla settimana o un paio

110
00:11:49,700 --> 00:11:55,260
di settimane fino a quando non si è completamente a proprio agio con come funziona.

111
00:11:55,260 --> 00:11:57,650
Detto questo grazie e arrivederci per ora.
