Sie sind auf Seite 1von 5

Lenguaje de Programacin JAVA 2 IINF y 2 ITIG

Lenguaje JAVA

Java SE 5.0: Generics (tipos genricos)


Indican en tiempo de compilacin qu tipo de objetos va a almacenar
una coleccin.
Facilitan la forma de acceder a los objetos almacenados y de
recorrerlos:
No es necesario realizar upcasting/downcasting.
No es necesario recurrir a Iterator.
ArrayList
lista.add
lista.add
lista.add

lista = new ArrayList();


(new Persona("Luis", 22));
(new Persona("Mario", 21));
(new Persona("Javier", 24));

Iterator it = lista.iterator();
while(it.hasNext())
{
Persona p = (Persona) it.next();
System.out.println(p.getNombre());
}

ArrayList<Persona> lista = new


ArrayList<Persona>();
lista.add (new Persona("Luis", 22));
lista.add (new Persona("Mario", 21));
lista.add (new Persona("Javier", 24));
for(Persona p:lista)
System.out.println(p.getNombre());

Java SE 5.0

Esta nueva estructura del


bucle for tambin se puede
utilizar para recorrer arrays

David Contreras Brcena

Java SE 5.0: Generics wildcards (comodines)


La sper clase de todos los tipos de colecciones es ?
(Collection <?>).
Resulta til cuando en un mtodo se desconoce el tipo de
objeto que almacena una coleccin.
public void mostrar(Collection<?> lista)
{
for(Object o:lista)
System.out.println(o);
}

Los wildcards no se pueden utilizar en todos los casos:


ArrayList<?> lista = new ArrayList<Persona>();
lista.add (new Persona("Luis", 22)); //ERROR:
//no se encuentra el mtodo add(Persona)

Hasta que no se conozca que tipos de objetos va a


almacenar la coleccin, no se podr aadir ninguno.
David Contreras Brcena

David Contreras Brcena - ETSI

Lenguaje de Programacin JAVA 2 IINF y 2 ITIG


Lenguaje JAVA

Java SE 5.0: Generics wildcards (comodines)


Al trabajar con herencia se pueden dar dos casos:
Se conoce la clase que define la coleccin:
ArrayList<Persona> lista = new ArrayList<Persona>();
lista.add (new Persona("Luis", 22));
lista.add (new Trabajador("Javier", 24, "Informatico"));
lista.add (new Persona("Mario", 21));
public void mostrar(Collection<Persona> lista)
{
for(Persona p:lista)
System.out.println(p);
}

Slo se conoce la superclase que define la coleccin:


ArrayList<Trabajador> lista = new ArrayList<Trabajador>();
lista.add (new Trabajador("Luis", 22, "Mdico"));
lista.add (new Trabajador("Javier", 24, "Informatico"));
lista.add (new Trabajador("Mario", 21, "Electricista"));
public void mostrar(Collection<? extends Persona> lista)
{
for(Persona p:lista)
System.out.println(p);
David Contreras Brcena
}

Java SE 5.0: Autoencapsulacin


Dado, que en una coleccin no se pueden almacenar tipos de datos
primitivos, en la 5.0 se automatiza este proceso.
Ya no es necesario encapsular el tipo de datos primitivo en su clase
wrapper correspondiente, se realiza la autoencapsulacin.
De igual manera, no ser necesario desencapsular el objeto.
ArrayList lista =new ArrayList();
lista.add (new Integer(4));
lista.add (new Integer (6));
Iterator it = lista.iterator();
while (it.hasNext())
{
Integer i = (Integer) it.next();
int x = i.intValue();
}

Java SE 5.0

ArrayList <Integer> lista = new


ArrayList<Integer>();
lista.add (new Integer(4));
lista.add(6);
for (Integer j:lista)
{
int x = j;

}
//

for (int x:lista)


{

David Contreras Brcena

David Contreras Brcena - ETSI

Lenguaje de Programacin JAVA 2 IINF y 2 ITIG


Lenguaje JAVA

Java SE 5.0: Enums (tipos enumerados de datos)


Hasta ahora, la nica forma de representar valores comunes
a varios objetos consista en definir atributos de clase.
Los Enums son estructuras que estn compuestas de
atributos de clase. De esta forma, podemos definir valores
comunes a varias clases. Un Enum define el tipo.
Cada tipo enumerado tiene el mtodo esttico values() que
devuelve un array con los valores en el orden en que fueron
declarados .
public
public
public
public
public
public
public

static
static
static
static
static
static
static

int
int
int
int
int
int
int

DIA_LUNES = 1;
DIA_MARTES = 2;
DIA_MIERCOLES=3;
DIA_JUEVES = 4;
DIA_VIERNES = 5;
DIA_SABADO = 6;
DIA_DOMINGO = 7;

Enum Dia {LUNES,MARTES,


MIERCOLES,JUEVES,VIERNES,SABADO
,DOMINGO};

Java SE 5.0

David Contreras Brcena

Java SE 5.0: Enums (tipos enumerados de datos)


Un tipo enumerado puede definir atributos y mtodos.
Todos ellos tendrn carcter esttico, por este motivo no
ser necesario declararlo as.
public enum Meses
{
ENERO (31,"INVIERNO"), FEBRERO
(28,"INVIERNO"), MARZO(31,"INVIERNO"),
ABRIL (30,"PRIMAVERA");
private int dias;
private String estacion;
Meses (int dias, String estacion)
{
this.dias = dias;
this.estacion = estacion;
}
public int dias()
{
return dias;
}
}

public class Precipitacion


{
private String ciudad;
private int lluvia; //en mm
private Meses mes;
public Precipitacion (String ciudad, int
lluvia, Meses mes)
{
this.ciudad = ciudad;
this.lluvia = lluvia;
this.mes = mes;
}
public String toString()
{
return ciudad + " (" + lluvia + "mm)" +
" - " + mes;
}
}

Contina
David Contreras Brcena

David Contreras Brcena - ETSI

Lenguaje de Programacin JAVA 2 IINF y 2 ITIG


Lenguaje JAVA

Java SE 5.0: Enums (tipos enumerados de datos)


public class App
{
public static void main(String[] s)
{
for(Object o:Meses.values())
System.out.println(o);
Meses m = Meses.FEBRERO;
System.out.println(m);
Precipitacion p = new Precipitacion ("Madrid", 55,
Meses.ABRIL);
System.out.println(p);
}
}

David Contreras Brcena

Java SE 5.0: Enums (tipos enumerados de datos)


public enum Operacion
{
SENO, COSENO, TANGENTE;
double calcular (double x)
{
double d = 0;
switch(this)
{
case SENO:d = sin(x);
case COSENO:d = cos(x);
case TANGENTE:d=tan(x);
}
return d;
}
}

David Contreras Brcena

David Contreras Brcena - ETSI

Lenguaje de Programacin JAVA 2 IINF y 2 ITIG


Lenguaje JAVA

Java SE 5.0: Importacin esttica


Para acceder a atributos de clase es necesario hacer
referencia a la clase en la que se definen.
La declaracin de la importacin esttica es anloga a la
declaracin de la importacin normal.
La importacin esttica ha de usarse cuando sea necesario
acceder frecuentemente a atributos de clase (estticos).
double d = Math.sin (Math.PI/2);

Java SE 5.0

import static java.lang.Math.*;


double d = sin (PI/2);

David Contreras Brcena

Java SE 5.0: Mtodo getContentPane()


Para aadir o eliminar un componente o aplicar un layout a
JFrame, JDialog, JWindow, JApplet o JInternalFrame era
necesario utilizar el mtodo getContentPane().
A partir de Java SE 5.0 se pueden realizar estas acciones
directamente sobre dichos contenedores.

Container c = this.getContentPane();
c.setLayout(new BorderLayout());
c.add (BorderLayout.NORTH,jlblTitulo);

Java SE 5.0

this.setLayout(new BorderLayout());
this.add (BorderLayout.NORTH,jlblTitulo);

David Contreras Brcena

David Contreras Brcena - ETSI

10