apuntes:genericos
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| apuntes:genericos [2021/10/22 06:25] – [Definición de una clase genérica] Santiago Faci | apuntes:genericos [2023/05/28 12:04] (current) – [El comodín ?] Santiago Faci | ||
|---|---|---|---|
| Line 74: | Line 74: | ||
| clase genérica. A este respecto se suelen utilizar diferentes letras para diferentes situaciones: | clase genérica. A este respecto se suelen utilizar diferentes letras para diferentes situaciones: | ||
| - | * \verb E para definir un elemento de una colección | + | * '' |
| - | * \verb K para definir una clave en un mapa | + | * '' |
| - | * \verb V para definir un valor en un mapa | + | * '' |
| - | * \verb T , \verb U para definir tipos de datos (clases) | + | * '' |
| ==== Métodos genéricos ==== | ==== Métodos genéricos ==== | ||
| Line 83: | Line 83: | ||
| Así como se pueden definir clases genéricas, también podemos definir métodos genéricos dentro de clases que no lo sean: | Así como se pueden definir clases genéricas, también podemos definir métodos genéricos dentro de clases que no lo sean: | ||
| - | \begin{lstlisting}[language=java] | + | < |
| public class Utils { | public class Utils { | ||
| public <T> T getUltimoElemento(ArrayList< | public <T> T getUltimoElemento(ArrayList< | ||
| Line 89: | Line 89: | ||
| } | } | ||
| } | } | ||
| - | \end{lstlisting} | + | </ |
| - | De esa manera, se podrá invocar al método | + | De esa manera, se podrá invocar al método |
| - | \subsection{El comodín ?} | + | ==== El comodín ? ==== |
| - | También se puede utilizar el caracter comodín | + | También se puede utilizar el caracter comodín |
| \verb ArrayList | \verb ArrayList | ||
| - | \begin{lstlisting}[language=java] | + | < |
| . . . | . . . | ||
| public void metodo(ArrayList<?> | public void metodo(ArrayList<?> | ||
| Line 105: | Line 105: | ||
| } | } | ||
| . . . | . . . | ||
| - | \end{lstlisting} | + | </ |
| Para este caso también podemos aprovecharnos de las características de la herencia para la definición de métodos genéricos, pudiendo definir el uso de la | Para este caso también podemos aprovecharnos de las características de la herencia para la definición de métodos genéricos, pudiendo definir el uso de la | ||
| Line 112: | Line 112: | ||
| Para aceptar cualquier clase que extienda de una determinada clase: | Para aceptar cualquier clase que extienda de una determinada clase: | ||
| - | \begin{lstlisting}[language=java] | + | < |
| . . . | . . . | ||
| public void Zoo { | public void Zoo { | ||
| Line 123: | Line 123: | ||
| } | } | ||
| . . . | . . . | ||
| - | \end{lstlisting} | + | </ |
| Y para aceptar cualquier clase que esté por encima de una determinada clase: | Y para aceptar cualquier clase que esté por encima de una determinada clase: | ||
| - | \begin{lstlisting}[language=java] | + | < |
| . . . | . . . | ||
| public void Zoo { | public void Zoo { | ||
| Line 138: | Line 138: | ||
| } | } | ||
| . . . | . . . | ||
| - | \end{lstlisting} | + | </ |
| De esa manera, podremos invocar al método \verb anadir | De esa manera, podremos invocar al método \verb anadir | ||
| Line 144: | Line 144: | ||
| siguientes clases: | siguientes clases: | ||
| - | \begin{lstlisting}[language=java] | + | < |
| public class Animal { | public class Animal { | ||
| . . . | . . . | ||
| } | } | ||
| - | \end{lstlisting} | + | </ |
| - | \begin{lstlisting}[language=java] | + | < |
| public class Leon extends Animal { | public class Leon extends Animal { | ||
| . . . | . . . | ||
| } | } | ||
| - | \end{lstlisting} | + | </ |
| - | \begin{lstlisting}[language=java] | + | < |
| public class Zoo { | public class Zoo { | ||
| . . . | . . . | ||
| Line 165: | Line 165: | ||
| . . . | . . . | ||
| } | } | ||
| - | \end{lstlisting} | + | </ |
| Las siguiente invocaciones producirían un error de compilación por incompatibilidad de tipos: | Las siguiente invocaciones producirían un error de compilación por incompatibilidad de tipos: | ||
| - | \begin{lstlisting}[language=java] | + | < |
| . . . | . . . | ||
| Zoo zoo = new Zoo(. . .); | Zoo zoo = new Zoo(. . .); | ||
| Line 176: | Line 176: | ||
| zoo.anadirAnimales(leones); | zoo.anadirAnimales(leones); | ||
| . . . | . . . | ||
| - | \end{lstlisting} | + | </ |
| Es por eso que tenemos que usar lo que se conoce como los comodínes. | Es por eso que tenemos que usar lo que se conoce como los comodínes. | ||
| Line 182: | Line 182: | ||
| Para el caso de las clases genéricas y métodos genéricos también podemos jugar con las características de herencia, utilizando las mismas | Para el caso de las clases genéricas y métodos genéricos también podemos jugar con las características de herencia, utilizando las mismas | ||
| expresiones que podemos usar con el comodín, pero con el caracter que empleemos para referirnos a la clase genérica. A diferencia del uso | expresiones que podemos usar con el comodín, pero con el caracter que empleemos para referirnos a la clase genérica. A diferencia del uso | ||
| - | del comodín | + | del comodín |
| - | \begin{lstlisting}[language=java] | + | < |
| public class Grupo<E extends Persona> { | public class Grupo<E extends Persona> { | ||
| private List< | private List< | ||
| Line 213: | Line 213: | ||
| } | } | ||
| } | } | ||
| - | \end{lstlisting} | + | </ |
| - | \begin{lstlisting}[language=java] | + | < |
| . . . | . . . | ||
| public <T extends Animal> T getAnimal(ArrayList< | public <T extends Animal> T getAnimal(ArrayList< | ||
| Line 224: | Line 224: | ||
| } | } | ||
| . . . | . . . | ||
| - | \end{lstlisting} | + | </ |
| + | |||
| + | ---- | ||
| + | |||
| + | (c) 2019-{{date> | ||
apuntes/genericos.1634883958.txt.gz · Last modified: by Santiago Faci
