Publicado el 31 de Julio del 2017
434 visualizaciones desde el 31 de Julio del 2017
108,7 KB
13 paginas
Creado hace 18a (23/04/2007)
Genéricos
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y Computación
Universidad Complutense de Madrid
23 de abril de 2007
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
¿Para qué?
p r i v a t e static List l e e P u n t o s ( String f i c h e r o )
throws F i l e N o t F o u n d E x c e p t i o n , I O E x c e p t i o n {
B u f f e r e d R e a d e r lector = new B u f f e r e d R e a d e r ( new F i l e R e a d e r ( f i c h e r o ));
List l i s t a P u n t o s = new L i n k e d L i s t ();
String datos = lector . r e a d L i n e ();
while ( datos != null ){
Punto p = new Punto ( datos );
l i s t a P u n t o s . add ( p );
datos = lector . r e a d L i n e ();
}
return l i s t a P u n t o s ;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Evitar conversiones de tipo
p r i v a t e static void a n a l i z a L i s t a P u n t o s ( List c ){
I t e r a t o r itr = c . i t e r a t o r ();
int i =1;
while ( itr . h a s N e x t ()){
Punto p = ( Punto ) itr . next ();
. . . . . . . . . . . . . . . . . . . . . . . . . . .
}
}
1
2
3
4
5
6
7
8
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Evitar conversiones de ejecución
Lista lista = l e e P u n t o s ( f i c h e r o );
lista . add ( new Recta ( new Punto (0 ,0) , new Punto (1 ,0)));
a n a l i z a P u n t o s ( lista );
1
2
3
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Definiendo clases genéricas
public i n t e r f a c e List <E >{
void add ( E x );
Iterator <E > i t e r a t o r ();
}
public i n t e r f a c e Iterator <E >{
E next ();
b o o l e a n h a s N e x t ();
}
1
2
3
4
5
6
7
8
9
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Subclases
List < Punto > ls = new ArrayList < Punto >();
List < FiguraPlana > lo = ls ; // ¿Es a d m i s i b l e ?
lo . add ( new Recta (A , B )); // s e r í a l e g a l .
1
2
1
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Comodines
void m u e s t r a ( Collection < Object > c ) {
for ( Object e : c ) {
System . out . p r i n t l n ( e );
}
¿Puedo pasarle algo de tipo Lista<FiguraPlana>?
void m u e s t r a ( Collection <? > c ) {
for ( Object e : c ) {
System . out . p r i n t l n ( e );
}
1
2
3
4
1
2
3
4
Es una colección de tipo desconocido, pero al menos deben ser
objetos.
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Comodines Acotados
p r i v a t e static void m u e s t r a ( List <? e x t e n d s FiguraPlana > c ){
I t e r a t o r itr = c . i t e r a t o r ();
int i =1;
while ( itr . h a s N e x t ()){
System . out . format ( " E l e m e n t o %d " + itr . next () , i );
System . out . p r i n t l n ();
i ++;
}
}
List < FiguraPlana > l i s t a F i g u r a s = l e e F i g u r a s ( n o m b r e F i g u r a s );
List < Punto > l i s t a P u n t o s = l e e P u n t o s ( n o m b r e P u n t o s );
System . out . p r i n t l n ( " Puntos : " );
m u e s t r a ( l i s t a P u n t o s );
System . out . p r i n t l n ( " F i g u r a s : " );
m u e s t r a ( l i s t a F i g u r a s );
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Métodos genéricos
void i n s t e r t a ( Collection <? > c , F i g u r a P l a n a [] f i g u r a s ) {
for ( F i g u r a P l a n a f : f i g u r a s ) {
c . add ( f ); // Ilegal , no se el tipo base de f i g u r a .
}
}
void i n s t e r t a ( Collection <? e x t e n d s FiguraPlana > c , F i g u r a P l a n a [] f i g u r a s ) {
for ( F i g u r a P l a n a f : f i g u r a s ) {
c . add ( f );
// Ilegal , no se el tipo base de f i g u r a .
}
}
1
2
3
4
5
1
2
3
4
5
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
p r i v a t e static < Fig e x t e n d s FiguraPlana > void i n s t e r t a ( Collection < Fig > c ,
Fig [] f i g u r a s ) {
for ( Fig f : f i g u r a s ) {
c . add ( f );
}
}
1
2
3
4
5
6
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
i n t e r f a c e Sink <T > {
flush ( T t );
}
public static <T > T w r i t e A l l ( Collection <T > coll , Sink <T > snk ) {
T last ;
for ( T t : coll ) {
last = t ;
snk . flush ( last );
}
return last ;
}
. . . . . . . . . . . . . . . . . . . . .
Sink < Object > s ;
Collection < String > cs ;
String str = w r i t e A l l ( cs , s ); // I l e g a l .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
public static <T > T w r i t e A l l ( Collection <? e x t e n d s T > , Sink <T >) {
...
}
...
String str = w r i t e A l l ( cs , s ); // D e v u e l v e algo de c l a s e O b j e c t
1
2
3
4
5
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
public static <T > T w r i t e A l l ( Collection <T > , Sink <? super T >) {
...
}
...
String str = w r i t e A l l ( cs , s ); // D e v u e l v e algo de c l a s e O b j e c t
1
2
3
4
5
Luis Fernando Llana Díaz
Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid
Genéricos
Comentarios de: Genéricos (0)
No hay comentarios