1
00:00:10,160 --> 00:00:12,210
Hola Te saludo nuevamente.

2
00:00:12,230 --> 00:00:16,920
Ubaldo Acosta espero que estés listo para comenzar con esta elección.

3
00:00:16,970 --> 00:00:22,300
A continuación vamos a estudiar el tema de genéricos en Java estás listo.

4
00:00:22,430 --> 00:00:27,090
Vamos genéricos en Java.

5
00:00:27,490 --> 00:00:33,670
Vamos a estudiar en esta elección los tipos genéricos en Java los tipos genéricos o genéricos se introdujeron

6
00:00:33,730 --> 00:00:38,740
en la versión 1.5 y fue uno de los mayores cambios para esta versión.

7
00:00:38,920 --> 00:00:45,490
Anteriormente teníamos que saber exactamente el tipo de dato que íbamos a utilizar para poder pasar

8
00:00:45,490 --> 00:00:50,420
por ejemplo parãmetros a una función o para instancias una clase.

9
00:00:50,500 --> 00:00:57,420
Sin embargo con ayuda de los genéricos podemos dejar pendiente el tipo de dato hasta el momento de instancias

10
00:00:57,490 --> 00:01:01,210
alguna clase genérica o del paso de un parámetro genérico

11
00:01:06,600 --> 00:01:12,750
podemos observar en el código mostrado una clase que define un tipo genérico con el uso del operador

12
00:01:12,750 --> 00:01:16,200
Diamante en la definición de la clase.

13
00:01:16,260 --> 00:01:23,070
Esto quiere decir que el tipo lo conoceremos hasta el momento en que sea utilizada esta clase y por

14
00:01:23,070 --> 00:01:31,020
ello se conoce como tipo genérico La T significa básicamente un tipo genérico que será reemplazado al

15
00:01:31,020 --> 00:01:37,740
momento de utilizar esta clase por lo que la T es simplemente el nombre que le damos al tipo genérico

16
00:01:37,980 --> 00:01:40,170
que vamos a utilizar.

17
00:01:40,200 --> 00:01:46,940
Existen varios nombres que podemos utilizar como veremos en la siguiente lámina posteriormente en la

18
00:01:46,950 --> 00:01:54,520
clase definimos un atributo del mismo tipo T el cual lo inicializar por medio del constructor de esta

19
00:01:54,520 --> 00:02:02,170
clase y podemos ver que cuando utilizamos esta clase en el método mostrado al momento de crear el objeto

20
00:02:02,170 --> 00:02:06,020
de esta clase especificamos por medio del operador Diamante.

21
00:02:06,160 --> 00:02:13,970
El tipo de dato que nos interesa utilizar y aquí es donde el uso de clases genéricas es muy útil ya

22
00:02:13,970 --> 00:02:19,410
que nos permite definir el tipo de dato que queremos utilizar hasta el momento de instancia.

23
00:02:19,550 --> 00:02:27,020
Un objeto de nuestra clase y así determinar funcionalidad cada vez más genérica valga la redundancia.

24
00:02:27,230 --> 00:02:34,610
De hecho al utilizar interfaces clases abstractas y polimorfismo ya hemos creado varios métodos genéricos

25
00:02:34,880 --> 00:02:38,460
ya que pueden ser utilizados por varios tipos de datos.

26
00:02:38,510 --> 00:02:45,380
Sin embargo este concepto de genéricos va un paso más allá y nos permite definir el tipo a utilizar

27
00:02:45,590 --> 00:02:50,480
y crear métodos aún más genéricos de los que hemos creado hasta el momento.

28
00:02:50,480 --> 00:02:56,900
Finalmente el método obtener tipo nos permite mandar a consola el tipo de dato que hemos definido para

29
00:02:56,900 --> 00:03:03,590
la clase genérica y así como hemos utilizado el tipo integer para instancias nuestra clase genérica

30
00:03:03,890 --> 00:03:06,560
podemos utilizar cualquier tipo de dato.

31
00:03:06,680 --> 00:03:11,480
Sin embargo no podemos utilizar tipos primitivos sino sólo tipos obvie

32
00:03:14,760 --> 00:03:16,260
tipos genéricos en Java

33
00:03:19,110 --> 00:03:26,700
al utilizar y crear tipos genéricos podemos utilizar varios nombres como la T que ya hemos utilizado.

34
00:03:26,730 --> 00:03:32,580
Sin embargo existen algunas convenciones que podemos seguir al momento de crear nuestras clases genéricas

35
00:03:32,880 --> 00:03:36,770
y así utilizar buenas prácticas al momento de crearlas.

36
00:03:36,840 --> 00:03:43,500
Obviamente también nos es útil al momento de usar estos tipos genéricos en clases ya creadas dentro

37
00:03:43,500 --> 00:03:50,520
de lapida y Java ya que sabremos con mayor certeza para qué sirve cada clase y tipo genérico que estemos

38
00:03:50,550 --> 00:03:51,790
utilizando.

39
00:03:51,990 --> 00:03:57,960
Así que en la tabla podemos ver cómo aplicar los tipos genéricos al framework de colecciones de IAVA

40
00:03:58,650 --> 00:04:05,460
así que podemos observar en la lámina que el tipo genérico significa elemento y se utiliza generalmente

41
00:04:05,580 --> 00:04:08,260
por el framework de colecciones de Java.

42
00:04:08,310 --> 00:04:16,320
La CAM significa aquí es decir que es una llave utilizado en tipos mapa la ENES significa nombre y es

43
00:04:16,320 --> 00:04:23,280
utilizado para describir números la tez significa Taipe y representa cualquier tipo es decir una clase

44
00:04:23,280 --> 00:04:32,520
a la vez significa Balio y representa un valor también utilizado en tipos MAP la S la U y la que se

45
00:04:32,520 --> 00:04:38,980
utiliza para representar cualquier otro tipo de datos tipos genéricos.

46
00:04:38,980 --> 00:04:39,550
En Java

47
00:04:43,830 --> 00:04:50,010
el tema de genéricos fue mayormente utilizado para cambiar varias de las APIs de Java pero en particular

48
00:04:50,220 --> 00:04:57,240
el API de freímos de Collections fue una de las APIs más beneficiadas ya que como podemos ver anteriormente

49
00:04:57,300 --> 00:05:00,190
era necesario definir un tipo lista.

50
00:05:00,210 --> 00:05:06,420
Sin embargo no había una certeza de que almacenará un solo tipo y así evitar problemas de conversión

51
00:05:06,420 --> 00:05:09,690
de objetos al momento de extraer sus elementos.

52
00:05:09,690 --> 00:05:15,750
Por ello anteriormente las listas almacenaban un tipo obvie y al momento de extraer el objeto de la

53
00:05:15,750 --> 00:05:22,510
lista el compilador tenía un Object y por lo tanto era necesario hacer un casting del objeto extraído.

54
00:05:22,590 --> 00:05:29,460
Como se observa en el Código de la clase sin generis esto podía provocar problemas ya que no había ninguna

55
00:05:29,460 --> 00:05:36,330
certeza de que la lista tuviera únicamente enteros ya que podía almacenar cualquier tipo de dato debido

56
00:05:36,360 --> 00:05:43,590
a que soportaba tipos obvien y al momento de extraer un elemento podríamos obtener errores de tipo al

57
00:05:43,590 --> 00:05:45,300
momento de extraer los elementos.

58
00:05:45,750 --> 00:05:52,080
Sin embargo con las colecciones genéricas podemos declarar una lista de un tipo en concreto y agregar

59
00:05:52,170 --> 00:05:59,040
a esta lista sólo los tipos o subtipos compatibles según las reglas de un casting que mencionamos.

60
00:05:59,040 --> 00:06:05,750
En el tema de conversión de objetos como podemos observar en el ejemplo de con Genetrix observamos que

61
00:06:05,750 --> 00:06:12,920
para definir la lista estamos utilizando el operador Diamante y especificamos que los objetos que podemos

62
00:06:12,920 --> 00:06:20,520
agregar a esta lista son exclusivamente de tipo integer o subclases del tipo Integer.

63
00:06:20,570 --> 00:06:27,170
De esta manera Cuando extraemos los valores de esta lista estamos seguros que serán de un tipo compatible

64
00:06:27,170 --> 00:06:34,280
con el tipo integer y por lo tanto no es necesario hacer un casting o conversión de objetos del objeto

65
00:06:34,340 --> 00:06:35,590
extraído.

66
00:06:35,750 --> 00:06:41,930
Por lo tanto las colecciones genéricas ofrecen la seguridad de que en tiempo de compilación los datos

67
00:06:41,990 --> 00:06:49,230
a almacenar son sólo del tipo especificado y eliminan la necesidad de hacer una conversión de objetos.

68
00:06:49,340 --> 00:06:57,850
Sólo debemos recordar que se necesita la versión 1.5 o mayor del j de Cadellada en la figura podemos

69
00:06:57,850 --> 00:07:04,660
observar cómo se cambió la definición de las interfaces y clases de la API de Collections y ahora se

70
00:07:04,660 --> 00:07:08,140
utilizan tipos genéricos en su definición.

71
00:07:08,140 --> 00:07:14,470
Vamos a crear a continuación algunos ejemplos para poner en práctica este concepto de manejo de genéricos.
