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: 2021/10/22 06:25 by Santiago Faci