Skip to content

Latest commit

 

History

History
168 lines (120 loc) · 4.3 KB

File metadata and controls

168 lines (120 loc) · 4.3 KB

Ejemplo 01: Clases Genéricas

Objetivos

  • Crear una clase que use Generics para comprender su uso.

Requisitos

  • Apache Maven 3.8.4 o superior
  • JDK (o OpenJDK)

Los generics (genéricos) en Java nos permiten hacer objetos que son robustos a la hora de compilar el código fuente para ser interpretado por la máquina virtual de Java. Fueron introducidos a partir de Java 5 dentro del framework Collections.

Al definir una clase o interfaz genérica, estamos definiendo un tipo de plantilla a partir de la cual se crearán posteriormente clases o interfaces que actuarán como tipos concretos.

El objetivo de esto es reducir errores y agregar una capa adicional de abstracción sobre los tipos.


Procedimiento

  1. Crea un nuevo proyecto con el siguiente pom.xml

    Crear proyecto

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.bedu.jse2</groupId>
        <artifactId>generics</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-api</artifactId>
                <version>5.5.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.2</version>
                </plugin>
            </plugins>
        </build>
    </project>
  2. Agrega una clase Holder en el paquete org.bedu.jse2.generics con el siguiente contenido:

    package org.bedu.jse2.generics;
    
    public class Holder<E> {
    
        private E object;
    
        void hold(E object){
            this.object = object;
        }
    
        E release(){
            return object;
        }
    }
  3. Crea una clase de prueba para la clase con el siguiente contenido inicial

    package org.bedu.jse2.generics;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    class HolderTest {
    
        private class ClasePropia {
            private  final String nombre;
            private final Integer edad;
    
            ClasePropia(String nombre, Integer edad){
                this.nombre = nombre;
                this.edad = edad;
            }
    
            public String getNombre(){
                return nombre;
            }
    
            public Integer getEdad(){
                return edad;
            }
        }
    }
  4. Agrega una primera prueba para validar que nuestra clase puede almacenar un entero.

    @Test
    @DisplayName("Puede guardar un Integer")
    void entero(){
        Integer entero = 123;
        Holder<Integer> holder = new Holder<>();
        holder.hold(entero);
    
        assertEquals(entero, holder.release());
    }
  5. Agrega una prueba para validar que nuestra clase puede almacenar un string.

    @Test
    @DisplayName("Puede guardar un String")
    void string(){
        String str = "Hola mundo";
        Holder<String> holder = new Holder<>();
        holder.hold(str);
    
        assertEquals(str, holder.release());
    }
  6. Agrega una prueba para validar que nuestra clase puede almacenar nuestra clase propia.

    @Test
    @DisplayName("Puede guardar una clase propia")
    void custom(){
    
        ClasePropia cp = new ClasePropia("Juan", 20);
    
        Holder<ClasePropia> holder = new Holder<>();
        holder.hold(cp);
    
        assertEquals(cp.getNombre(), "Juan");
        assertEquals(cp.getEdad(), 20);
    }

    Prueba


¡Felicidades! Completaste el primer ejemplo.


Siguiente (Reto 1)