SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
SCJP 6
     Clase 7 – Generics




    Ezequiel Aranda
Sun Microsystems Campus
      Ambassador
Disclaimer & Acknowledgments
> Even though Ezequiel Aranda is a full-time employee of Sun
  Microsystems, the contents here are created as his own
  personal endeavor and thus does not reflect any official
  stance of Sun Microsystems.
> Sun Microsystems is not responsible for any inaccuracies in
  the contents.
> Acknowledgments – The slides of this presentation are made
  from “SCJP Unit 7” by Warit Wanwithu and Thanisa
  Kruawaisayawan and SCJP Workshop by P. Srikanth.
> This slides are Licensed under a Creative Commons
  Attribution – Noncommercial – Share Alike 3.0
   > http://creativecommons.org/licenses/by-nc-sa/3.0/
AGENDA

>  enerics
 G
>  étodos con generics
 M
>  eclaraciones con generics
 D
Generics

>  a manera antigua:
 L
  List myList = new ArrayList();
  myList.add(quot;Fredquot;);
  myList.add(new Dog());
  myList.add(new Integer(42));
>  os métodos que obtenian los objetos de las
 L
 colecciones sólo podían tener un único tipo
 de retorno: java.lang.Object
   String s = (String) myList.get(0);
La manera nueva: Generics

  List<String> myList = new
   ArrayList<String>();
  myList.add(quot;Fredquot;);
  myList.add(new Dog()); // error
>  stamos diciéndole al compilador que esta
 E
 colección solo puede contener Strings.
  String s = myList.get(0);
La manera nueva: Generics (II)

>  l tipo de los retornos puede ser declarado
 E
 como un generic también:
  public Set<Dog> getDogList() {
      Set<Dog> dogs = new
      HashSet<Dog>();
      // más código para insertar perros
      return dogs;
  }
Mezclando generics con non-
           generics
List<Integer> myList = new
 ArrayList<Integer>();
myList.add(4);
myList.add(6);
Adder adder = new Adder();
int total = adder.addAll(myList);
System.out.println(total);
class Adder {
    int addAll(List list) {
        Iterator it = list.iterator();
        int total = 0;
     while (it.hasNext()) {
          int i =
        ((Integer)it.next()).intValue();
         total += i;
     }
     return total;
    }
}
List<Integer> myList = new
  ArrayList<Integer>();
myList.add(4);
myList.add(6);
Inserter in = new Inserter();
in.insert(myList);
class Inserter {
    void insert(List list) {
        list.add(new String(quot;42quot;));
    }
}
Mezclando generics con non-
             generics
>  todo eso, ¿Funciona?
 Y
>  amentablemente, si (compila y corre).
 L
>  e hecho, el compilador nos advertirá (a
 D
 través de un warning) de que estamos
 corriendo un riesgo importante al enviar
 nuestra lista genérica a un método que no lo
 es.
>  in embargo, un warning no es más que una
 S
 advertencia. Es decir, no se lo considera un
 error.
Polimorfismo y generics

>  udimos asignar un ArrayList a una referencia
 P
 a List porque List es un supertipo de ArrayList.
  List<Integer> myList = new
   ArrayList<Integer>();
>  ero, ¿Podemos hacer esto?
 P
  class Parent { }
  class Child extends Parent { }
  List<Parent> myList = new
   ArrayList<Child>();
Polimorfismo y Generics (II)

>  n la declaración la regla es muy simple, el
 E
 tipo declarado en lado izquierdo debe ser el
 mismo que el tipo en el lado derecho.
  List<JButton> myList = new
   ArrayList<JButton>();
  List<Object> myList = new
   ArrayList<Object>();
  List<Integer> myList =
   newArrayList<Integer>();
Métodos con Generics
public static void checkAnimals
  (ArrayList<Animal> animals) {
    for(Animal a : animals) {
     a.checkup();}}
public static void main(String[] args) {
    List<Dog> dogs = new ArrayList<Dog>();
    List<Cat> cats = new ArrayList<Cat>();
    List<Bird> birds = new ArrayList<Bird>();
    checkAnimals(dogs); // List<Dog>
    checkAnimals(cats); // List<Cat>
    checkAnimals(birds); // List<Bird>
}
Métodos con Generics (II)

>  o pueden asignarse ArrayLists de subtipos
 N
 de Animal al ArrayList del supertipo Animal.
>  l compilador detendrá la compilación.
 E
>  a única cosa que puede pasarse como
 L
 parámetro en un método cuyo argumento sea
 un ArrayList<Animal> será un
 ArrayList<Animal>
Métodos con Generics (III)

  public void addAnimal
   (ArrayList<Animal> animals) {
      animals.add(new Dog());
      //a veces, vale...
  }
>  odríamos, sin embargo, hacer algo como lo
 P
 que se ve arriba, lo cual compilará siempre y
 cuando lo que pasemos al método sea un
 ArrayList<Animal>.
Métodos con Generics (IV)

>  ay un mecanismo para “decirle” al
 H
 compilador que podemos aceptar cualquier
 subtipo del argumento declarado en la
 parametrización, porque no vamos a agregar
 nada en la colección.
>  icho mecanismo se llama “Wildcard”.
 D
  public void addAnimal(List<?
   extends Animal> animals)
Métodos con Generics (V)

>  on <? extends Animal> estamos diciendo
 C
 “aquí podemos asignar una colección que sea
 un subtipo de List y/o este parametrizada con
 un subtipo de Animal…”
>  … Y prometemos no agregar nada a la
 “
 colección dentro de este método”.
  public void addAnimal(List<?
   extends Animal> animals) {
    animals.add(new Dog());
  // ¡NO! no podemos agregar nada
Métodos con Generics (VI)
> Hay una forma de usar un wildcard y
  que nos sea permitido agregar
  elementos a la colección: la palabra
  “super”.
  public static void addAnimal(List<? super
    Dog> animals)
> Esencialmente, estamos diciendo “Don compilador,
  acepte cualquier lista parametrizada con Dog o un
  supertipo de Dog. Cualquier cosa más abajo en el
  árbol de herencia, no; pero cualquier cosa más
  arriba, sí”.
Métodos con Generics (VII)
public static void addAnimal(List<? super
  Dog> animals) {
animals.add(new Dog());
}
public static void main(String[] args) {
List<Animal> animals = new
  ArrayList<Animal>();
animals.add(new Dog());
addAnimal(animals);
}
Pregunta

> public void foo(List<?> list) { }
> public void foo(List<Object> list)
  { }
>  En que se diferencian?
 ¿
Métodos con Generics (VIII)

  public void foo(List<?> list) { }
>  implemente significa “cualquier tipo”.
 S
>  ualquier List podría asignarse al argumento.
 C
>  in usar “super”, no podremos agregar nada
 S
 a list.
Métodos con Generics (IX)

  public void foo(List<Object> list)
   {}
>  ignifica que el método solo puede tomar una
 S
 List<Object>, no una lista parametrizada en
 algún subtipo de Object.
>  in embargo, podremos agregar cosas a la
 S
 colección.
Pregunta
1)  List<?> list = new ArrayList<Dog>();
2)  List<? extends Animal> aList = new
    ArrayList<Dog>();
3)  List<?> foo = new ArrayList<? extends
    Animal>();
4)  List<? extends Dog> cList = new
    ArrayList<Integer>();
5)  List<? super Dog> bList = new
    ArrayList<Animal>();
6)  List<? super Animal> dList = new
    ArrayList<Dog>();

>  ¿Cuales compilan?
Declaraciones con Generics

  public class Bucket<E>{ boolean
   add(E o) }

>  <E>” es una marcador de
 “
 sustitución para el tipo que
 utilicemos. La interfaz List
 funciona en este caso como
 un template que, cuando
 escribamos nuestro código,
 cambiaremos por el tipo
 deseado.
Declaraciones con Generics (II)
>  n otras palabras, el tipo que utilicemos para
 E
 reemplazar ‘E’ cuando declaremos nuestras
 instancias será lo que podamos agregar a las
 colecciones involucradas.
  Bucket<Animal> list = new
   Bucket<Animal>();
>  a ‘E’ pasa a ser un marcador de “coloque el
 L
 tipo deseado aquí” a ser específicamente el
 tipo “Animal”, y el método add a comportarse
 de la siguiente forma:
  boolean add(Animal a)
import java.util.*;
public class RentalGeneric<T> {
    private List<T> rentalPool;
    private int maxNum;
    public RentalGeneric( int maxNum, List<T>
    rentalPool) {
        this.maxNum = maxNum;
        this.rentalPool = rentalPool;
    }
    public T getRental() {
     return rentalPool.get(0);
    }
    public void returnRental(T returnedThing) {
        rentalPool.add(returnedThing);
    }
}
public class AnimalHolder<T extends
  Animal>{
    T animal;
    public static void main(String[]
    args) {
     AnimalHolder<Dog> dogHolder =
    new AnimalHolder<Dog>(); // OK
     AnimalHolder<Integer> x = new
    AnimalHolder<Integer>(); // KO
    }
}
Creando Métodos parametrizados
import java.util.*;
public class CreateAnArrayList {
    public <T> void makeArrayList(T t) {
        /* Tomamos un objeto de un tipo
        desconocido y usamos ‘T’ para representar
        dicho tipo.*/
     List<T> list = new ArrayList<T>();
        // Ahora podemos crear la lista usando ‘T’
        list.add(t);
    }
}
Preguntas

Weitere ähnliche Inhalte

Was ist angesagt?

Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosjubacalo
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Robert Wolf
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc X
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc X
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLjubacalo
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Pooflekoso
 

Was ist angesagt? (19)

Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viveros
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Clase 6 objetos de javaScript
Clase 6 objetos de javaScriptClase 6 objetos de javaScript
Clase 6 objetos de javaScript
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
Jyoc java-cap03 bucles
Jyoc java-cap03 buclesJyoc java-cap03 bucles
Jyoc java-cap03 bucles
 
Jyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcacionesJyoc java-cap02 bifurcaciones
Jyoc java-cap02 bifurcaciones
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTML
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Por pagar
Por pagarPor pagar
Por pagar
 
Guia 12 js
Guia 12 jsGuia 12 js
Guia 12 js
 
Ajax
AjaxAjax
Ajax
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
SCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, PooSCJP, Clase 2: Ejemplos De Enum, Poo
SCJP, Clase 2: Ejemplos De Enum, Poo
 

Andere mochten auch

Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcancesflekoso
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutosflekoso
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threadsflekoso
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFXflekoso
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
SCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/OSCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/Oflekoso
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducciónflekoso
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordTelefónica
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Javaflekoso
 

Andere mochten auch (9)

Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcances
 
De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutos
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFX
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
SCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/OSCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/O
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducción
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWord
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Java
 

Ähnlich wie SCJP, Clase 7: Generics

Clase7 generics
Clase7 genericsClase7 generics
Clase7 genericsjorg_marq
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguaygtuguruguay
 
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDD
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDDREPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDD
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDDSandra Campos
 
Asegúr@IT II - Seguridad en Web
Asegúr@IT II - Seguridad en WebAsegúr@IT II - Seguridad en Web
Asegúr@IT II - Seguridad en WebChema Alonso
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Pythonnqnwebs
 
Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacionmarkos1992
 
Sesion Nº 08 - Libreria Online En Php & Introduccion A Mysql
Sesion Nº 08 - Libreria Online En Php & Introduccion A MysqlSesion Nº 08 - Libreria Online En Php & Introduccion A Mysql
Sesion Nº 08 - Libreria Online En Php & Introduccion A MysqlEdgar A. Cruz Huaman
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)Videoconferencias UTPL
 
ED 02 2_tda_arra_u
ED 02 2_tda_arra_uED 02 2_tda_arra_u
ED 02 2_tda_arra_uA J
 
Introduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaIntroduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaRoberto Allende
 
Videoconferencia
VideoconferenciaVideoconferencia
Videoconferenciaalberto
 
Curso programacionpython Clase 1
Curso programacionpython Clase 1Curso programacionpython Clase 1
Curso programacionpython Clase 1sindyvaness
 
Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Wilian
 

Ähnlich wie SCJP, Clase 7: Generics (20)

Clase7 generics
Clase7 genericsClase7 generics
Clase7 generics
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguay
 
Xml On Rails
Xml On RailsXml On Rails
Xml On Rails
 
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDD
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDDREPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDD
REPORTES JASPERREPORT E IREPORT SIN CONEXIÓN A UNA BBDD
 
Asegúr@IT II - Seguridad en Web
Asegúr@IT II - Seguridad en WebAsegúr@IT II - Seguridad en Web
Asegúr@IT II - Seguridad en Web
 
PHP
PHPPHP
PHP
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Trabajo final programacion
Trabajo final programacionTrabajo final programacion
Trabajo final programacion
 
Sesion Nº 08 - Libreria Online En Php & Introduccion A Mysql
Sesion Nº 08 - Libreria Online En Php & Introduccion A MysqlSesion Nº 08 - Libreria Online En Php & Introduccion A Mysql
Sesion Nº 08 - Libreria Online En Php & Introduccion A Mysql
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
ED 02 2_tda_arra_u
ED 02 2_tda_arra_uED 02 2_tda_arra_u
ED 02 2_tda_arra_u
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
C# calculadora
C# calculadoraC# calculadora
C# calculadora
 
Introduccion a Python por Facundo Batista
Introduccion a Python por Facundo BatistaIntroduccion a Python por Facundo Batista
Introduccion a Python por Facundo Batista
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Videoconferencia
VideoconferenciaVideoconferencia
Videoconferencia
 
Clase09 java script
Clase09 java scriptClase09 java script
Clase09 java script
 
Curso programacionpython Clase 1
Curso programacionpython Clase 1Curso programacionpython Clase 1
Curso programacionpython Clase 1
 
Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2Curso TIC de PHP y MSQL Parte 2
Curso TIC de PHP y MSQL Parte 2
 

Kürzlich hochgeladen

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 

Kürzlich hochgeladen (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 

SCJP, Clase 7: Generics

  • 1. SCJP 6 Clase 7 – Generics Ezequiel Aranda Sun Microsystems Campus Ambassador
  • 2. Disclaimer & Acknowledgments > Even though Ezequiel Aranda is a full-time employee of Sun Microsystems, the contents here are created as his own personal endeavor and thus does not reflect any official stance of Sun Microsystems. > Sun Microsystems is not responsible for any inaccuracies in the contents. > Acknowledgments – The slides of this presentation are made from “SCJP Unit 7” by Warit Wanwithu and Thanisa Kruawaisayawan and SCJP Workshop by P. Srikanth. > This slides are Licensed under a Creative Commons Attribution – Noncommercial – Share Alike 3.0 > http://creativecommons.org/licenses/by-nc-sa/3.0/
  • 3. AGENDA >  enerics G >  étodos con generics M >  eclaraciones con generics D
  • 4. Generics >  a manera antigua: L List myList = new ArrayList(); myList.add(quot;Fredquot;); myList.add(new Dog()); myList.add(new Integer(42)); >  os métodos que obtenian los objetos de las L colecciones sólo podían tener un único tipo de retorno: java.lang.Object String s = (String) myList.get(0);
  • 5. La manera nueva: Generics List<String> myList = new ArrayList<String>(); myList.add(quot;Fredquot;); myList.add(new Dog()); // error >  stamos diciéndole al compilador que esta E colección solo puede contener Strings. String s = myList.get(0);
  • 6. La manera nueva: Generics (II) >  l tipo de los retornos puede ser declarado E como un generic también: public Set<Dog> getDogList() { Set<Dog> dogs = new HashSet<Dog>(); // más código para insertar perros return dogs; }
  • 7. Mezclando generics con non- generics List<Integer> myList = new ArrayList<Integer>(); myList.add(4); myList.add(6); Adder adder = new Adder(); int total = adder.addAll(myList); System.out.println(total);
  • 8. class Adder { int addAll(List list) { Iterator it = list.iterator(); int total = 0; while (it.hasNext()) { int i = ((Integer)it.next()).intValue(); total += i; } return total; } }
  • 9. List<Integer> myList = new ArrayList<Integer>(); myList.add(4); myList.add(6); Inserter in = new Inserter(); in.insert(myList); class Inserter { void insert(List list) { list.add(new String(quot;42quot;)); } }
  • 10. Mezclando generics con non- generics >  todo eso, ¿Funciona? Y >  amentablemente, si (compila y corre). L >  e hecho, el compilador nos advertirá (a D través de un warning) de que estamos corriendo un riesgo importante al enviar nuestra lista genérica a un método que no lo es. >  in embargo, un warning no es más que una S advertencia. Es decir, no se lo considera un error.
  • 11. Polimorfismo y generics >  udimos asignar un ArrayList a una referencia P a List porque List es un supertipo de ArrayList. List<Integer> myList = new ArrayList<Integer>(); >  ero, ¿Podemos hacer esto? P class Parent { } class Child extends Parent { } List<Parent> myList = new ArrayList<Child>();
  • 12. Polimorfismo y Generics (II) >  n la declaración la regla es muy simple, el E tipo declarado en lado izquierdo debe ser el mismo que el tipo en el lado derecho. List<JButton> myList = new ArrayList<JButton>(); List<Object> myList = new ArrayList<Object>(); List<Integer> myList = newArrayList<Integer>();
  • 13. Métodos con Generics public static void checkAnimals (ArrayList<Animal> animals) { for(Animal a : animals) { a.checkup();}} public static void main(String[] args) { List<Dog> dogs = new ArrayList<Dog>(); List<Cat> cats = new ArrayList<Cat>(); List<Bird> birds = new ArrayList<Bird>(); checkAnimals(dogs); // List<Dog> checkAnimals(cats); // List<Cat> checkAnimals(birds); // List<Bird> }
  • 14. Métodos con Generics (II) >  o pueden asignarse ArrayLists de subtipos N de Animal al ArrayList del supertipo Animal. >  l compilador detendrá la compilación. E >  a única cosa que puede pasarse como L parámetro en un método cuyo argumento sea un ArrayList<Animal> será un ArrayList<Animal>
  • 15. Métodos con Generics (III) public void addAnimal (ArrayList<Animal> animals) { animals.add(new Dog()); //a veces, vale... } >  odríamos, sin embargo, hacer algo como lo P que se ve arriba, lo cual compilará siempre y cuando lo que pasemos al método sea un ArrayList<Animal>.
  • 16. Métodos con Generics (IV) >  ay un mecanismo para “decirle” al H compilador que podemos aceptar cualquier subtipo del argumento declarado en la parametrización, porque no vamos a agregar nada en la colección. >  icho mecanismo se llama “Wildcard”. D public void addAnimal(List<? extends Animal> animals)
  • 17. Métodos con Generics (V) >  on <? extends Animal> estamos diciendo C “aquí podemos asignar una colección que sea un subtipo de List y/o este parametrizada con un subtipo de Animal…” >  … Y prometemos no agregar nada a la “ colección dentro de este método”. public void addAnimal(List<? extends Animal> animals) { animals.add(new Dog()); // ¡NO! no podemos agregar nada
  • 18. Métodos con Generics (VI) > Hay una forma de usar un wildcard y que nos sea permitido agregar elementos a la colección: la palabra “super”. public static void addAnimal(List<? super Dog> animals) > Esencialmente, estamos diciendo “Don compilador, acepte cualquier lista parametrizada con Dog o un supertipo de Dog. Cualquier cosa más abajo en el árbol de herencia, no; pero cualquier cosa más arriba, sí”.
  • 19. Métodos con Generics (VII) public static void addAnimal(List<? super Dog> animals) { animals.add(new Dog()); } public static void main(String[] args) { List<Animal> animals = new ArrayList<Animal>(); animals.add(new Dog()); addAnimal(animals); }
  • 20. Pregunta > public void foo(List<?> list) { } > public void foo(List<Object> list) { } >  En que se diferencian? ¿
  • 21. Métodos con Generics (VIII) public void foo(List<?> list) { } >  implemente significa “cualquier tipo”. S >  ualquier List podría asignarse al argumento. C >  in usar “super”, no podremos agregar nada S a list.
  • 22. Métodos con Generics (IX) public void foo(List<Object> list) {} >  ignifica que el método solo puede tomar una S List<Object>, no una lista parametrizada en algún subtipo de Object. >  in embargo, podremos agregar cosas a la S colección.
  • 23. Pregunta 1)  List<?> list = new ArrayList<Dog>(); 2)  List<? extends Animal> aList = new ArrayList<Dog>(); 3)  List<?> foo = new ArrayList<? extends Animal>(); 4)  List<? extends Dog> cList = new ArrayList<Integer>(); 5)  List<? super Dog> bList = new ArrayList<Animal>(); 6)  List<? super Animal> dList = new ArrayList<Dog>(); >  ¿Cuales compilan?
  • 24. Declaraciones con Generics public class Bucket<E>{ boolean add(E o) } >  <E>” es una marcador de “ sustitución para el tipo que utilicemos. La interfaz List funciona en este caso como un template que, cuando escribamos nuestro código, cambiaremos por el tipo deseado.
  • 25. Declaraciones con Generics (II) >  n otras palabras, el tipo que utilicemos para E reemplazar ‘E’ cuando declaremos nuestras instancias será lo que podamos agregar a las colecciones involucradas. Bucket<Animal> list = new Bucket<Animal>(); >  a ‘E’ pasa a ser un marcador de “coloque el L tipo deseado aquí” a ser específicamente el tipo “Animal”, y el método add a comportarse de la siguiente forma: boolean add(Animal a)
  • 26. import java.util.*; public class RentalGeneric<T> { private List<T> rentalPool; private int maxNum; public RentalGeneric( int maxNum, List<T> rentalPool) { this.maxNum = maxNum; this.rentalPool = rentalPool; } public T getRental() { return rentalPool.get(0); } public void returnRental(T returnedThing) { rentalPool.add(returnedThing); } }
  • 27. public class AnimalHolder<T extends Animal>{ T animal; public static void main(String[] args) { AnimalHolder<Dog> dogHolder = new AnimalHolder<Dog>(); // OK AnimalHolder<Integer> x = new AnimalHolder<Integer>(); // KO } }
  • 28. Creando Métodos parametrizados import java.util.*; public class CreateAnArrayList { public <T> void makeArrayList(T t) { /* Tomamos un objeto de un tipo desconocido y usamos ‘T’ para representar dicho tipo.*/ List<T> list = new ArrayList<T>(); // Ahora podemos crear la lista usando ‘T’ list.add(t); } }