Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:genericos

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:genericos [2021/10/22 06:25] – [Definición de una clase genérica] Santiago Faciapuntes: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  para definir un elemento de una colección +  * ''E'' para definir un elemento de una colección 
-  * \verb  para definir una clave en un mapa +  * ''K'' para definir una clave en un mapa 
-  * \verb  para definir un valor en un mapa +  * ''V'' para definir un valor en un mapa 
-  * \verb T , \verb U  para definir tipos de datos (clases)+  * ''T''''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]+<code java>
 public class Utils { public class Utils {
     public <T> T getUltimoElemento(ArrayList<T> lista) {     public <T> T getUltimoElemento(ArrayList<T> lista) {
Line 89: Line 89:
     }     }
 } }
-\end{lstlisting}+</code>
  
-De esa manera, se podrá invocar al método \verb getUltimoElemento  con cualquier \verb ArrayList , independientemente del tipo que sea.+De esa manera, se podrá invocar al método ''getUltimoElemento'' con cualquier ''ArrayList'', independientemente del tipo que sea.
  
-\subsection{El comodín ?}+==== El comodín ? ====
  
-También se puede utilizar el caracter comodín \verb  para indicar que se acepta cualquier tipo, definiendo, por ejemplo, como parámetro un+También se puede utilizar el caracter comodín ''?'' para indicar que se acepta cualquier tipo, definiendo, por ejemplo, como parámetro un
 \verb ArrayList  de la siguiente forma: \verb ArrayList  de la siguiente forma:
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 public void metodo(ArrayList<?> elementos) { public void metodo(ArrayList<?> elementos) {
Line 105: Line 105:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 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]+<code java>
 . . . . . .
 public void Zoo { public void Zoo {
Line 123: Line 123:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 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]+<code java>
 . . . . . .
 public void Zoo { public void Zoo {
Line 138: Line 138:
 } }
 . . . . . .
-\end{lstlisting}+</code>
  
 De esa manera, podremos invocar al método \verb anadir  de múltiples formas, siempre y cuando pasemos como parámetro \verb ArrayList un tipo De esa manera, podremos invocar al método \verb anadir  de múltiples formas, siempre y cuando pasemos como parámetro \verb ArrayList un tipo
Line 144: Line 144:
 siguientes clases: siguientes clases:
  
-\begin{lstlisting}[language=java]+<code java>
 public class Animal { public class Animal {
 . . . . . .
 } }
-\end{lstlisting}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 public class Leon extends Animal { public class Leon extends Animal {
 . . . . . .
 } }
-\end{lstlisting}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 public class Zoo { public class Zoo {
     . . .     . . .
Line 165: Line 165:
     . . .     . . .
 } }
-\end{lstlisting}+</code>
  
 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]+<code java>
 . . . . . .
 Zoo zoo = new Zoo(. . .); Zoo zoo = new Zoo(. . .);
Line 176: Line 176:
 zoo.anadirAnimales(leones);                 // Error de compilación zoo.anadirAnimales(leones);                 // Error de compilación
 . . . . . .
-\end{lstlisting}+</code>
  
 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 \verb ? , podremos hacer referencia a la clase genérica a lo largo de la implementación del método o clase.+del comodín ''?'', podremos hacer referencia a la clase genérica a lo largo de la implementación del método o clase.
  
-\begin{lstlisting}[language=java]+<code java>
 public class Grupo<E extends Persona> { public class Grupo<E extends Persona> {
     private List<E> participantes;     private List<E> participantes;
Line 213: Line 213:
     }     }
 } }
-\end{lstlisting}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 . . . . . .
 public <T extends Animal> T getAnimal(ArrayList<T extends Animal> animales) { public <T extends Animal> T getAnimal(ArrayList<T extends Animal> animales) {
Line 224: Line 224:
 } }
 . . . . . .
-\end{lstlisting}+</code> 
 + 
 +---- 
 + 
 +(c) 2019-{{date>%Y}Santiago Faci
  
apuntes/genericos.1634883958.txt.gz · Last modified: 2021/10/22 06:25 by Santiago Faci