Las clases genéricas facilitan la reutilización. Haga que su código sea escalable y eficiente usando clases genéricas en Java.
Generics es un concepto de programación que le permite especificar el tipo que desea almacenar en una colección. Un tipo genérico puede ser cualquier valor no primitivo. Los parámetros de tipo tradicionales con los que puede estar familiarizado son cadenas y enteros.
Sin embargo, puede crear un tipo genérico único. Además, puede crear una clase genérica y usarla para crear diferentes colecciones usando genéricos.
Crear un tipo genérico
Un tipo genérico es esencialmente un objeto, creado usando una clase o una interfaz. Entonces, para este artículo, el tipo genérico será un cliente. Usando una aplicación de nivel empresarial de muestra, el cliente representa una entidad en un sistema de base de datos. Este sistema de base de datos da servicio a una empresa de muebles que tiene tres ubicaciones físicas en tres ciudades diferentes.
publicabstractclassCustomer{
private String name;
publicCustomer(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Notarás la abstracto palabra clave en el Cliente declaración de clase anterior. Significa que no puede crear un tipo u objeto directo desde el Cliente tipo.
Dado que cada ubicación de tienda física tendrá una lista única de clientes, la aplicación deberá tener tres subclases de clientes que implementará utilizando el concepto de programación de herencia.
Estas tres subclases serán los tipos sólidos del genérico. Cliente tipo. La primera Cliente subclase contendrá el siguiente código:
publicclassCity1CustomerextendsCustomer{
publicCity1Customer(String name){
super(name);
}
}
Crear una clase genérica
Para usar un tipo genérico, deberá tener una clase o método genérico que acepte este tipo como parámetro. Para crear una clase genérica, simplemente necesita insertar el parámetro de tipo en la declaración de la clase.
publicclassPromotion<T> {}
El código anterior indica que el Promoción la clase es genérica. Esto significa que el Promoción La clase usa tipos para crear sus objetos. Ahora la declaración de clase puede tomar una colección de objetos que son cadenas, números enteros, clientes, etc. Sin embargo, la empresa de muebles sólo quiere la Promoción clase para crear objetos usando el Cliente tipos
publicclassPromotion<TextendsCustomer> {}
El código actualizado anterior asegura que el Promoción la clase solo toma el Cliente tipos, esto significa todas las subclases del Cliente clase.
Dado que hay tres tiendas, la empresa quiere crear una promoción independiente para cada tienda. Los datos requeridos para estas promociones son similares. Cada promoción tendrá un nombre y una colección de clientes que ganaron en esa promoción.
Hay varias formas de abordar este problema. Podrías crear un Promoción clase principal y tiene tres subclases para cada ubicación de tienda. Pero dado que cada Promoción tiene una estructura similar, terminará escribiendo código duplicado, lo cual es ineficiente (especialmente porque ya está trabajando con Cliente subclases).
Por lo tanto, un Promoción La clase genérica es una de las soluciones más eficientes a este problema.
import java.util.ArrayList;
publicclassPromotion<TextendsCustomer> {
private String promoName;
private ArrayListwinners = new ArrayList<>(); publicPromotion(String promoName){
this.promoName = promoName;
}public String getPromoName(){
return promoName;
}publicvoidaddCustomer(T customer){
if (winners.contains(customer)) {
System.out.println( customer.getName() + " is already a winner of this prize.");
} else {
winners.add(customer);
System.out.println( customer.getName() + " is a winner in the " + this.promoName);
}
}
publicintnumWinners(){
returnthis.winners.size();
}
}
El Promoción clase genérica tiene una sola variable (promoName). Esta clase de Java acepta una colección de clientes que ganaron la promoción (ganadores) y los almacena en un estructura de datos ArrayList. Para agregar un nuevo cliente a una colección de promoción específica, deberá usar el agregarCliente() método. Si en algún momento desea saber el número de clientes que hay en una colección, puede invocar el númeroGanadores() método.
Creación de colecciones usando una clase genérica
Antes de que pueda comenzar a crear colecciones, deberá crear clientes.
publicclassMain{
publicstaticvoidmain(String[] args){
City1Customer john = new City1Customer("John Brown");
City1Customer kelly = new City1Customer("Kelly James");
City2Customer jane = new City2Customer("Jane Doe");
City3Customer jess = new City3Customer("Jess Smith");
}
}
El Principal La clase anterior crea cuatro objetos de cliente, cada uno de los cuales pertenece a una de las tres ubicaciones de tienda. Para comenzar a crear colecciones, primero deberá crear objetos de promoción (uno para cada ubicación de tienda).
Promotion city1promo = new Promotion("City1 Promo");
Promotion city2promo = new Promotion("City2 Promo");
Promotion city3promo = new Promotion("City3 Promo");
Insertando las tres líneas de código de arriba en el Principal class creará efectivamente tres promociones específicas de tipo (o ubicación). Por lo tanto, solo los clientes de la tienda en la primera ubicación de la ciudad (Ciudad1Cliente) puede ser ganador en la promoción de esa ciudad (ciudad1promo).
city1promo.addCustomer(john);
city1promo.addCustomer(kelly);
Por lo tanto, agregando el código anterior al Principal class producirá el siguiente resultado en la consola:
Sin embargo, si intenta agregar un tercer cliente a la lista de ganadores de la promoción en la primera ciudad, su IDE producirá un error de compilación.
Esto se debe a que ni jane ni Cadena es un cliente de la tienda en la primera ciudad. La creación de tipos y clases genéricos es útil, ya que evita que estos errores simples pasen desapercibidos y dañen la base de datos de un sistema. En una aplicación pequeña, puede ser fácil detectar errores como este, pero en un sistema de nivel empresarial, errores como este pueden pasar desapercibidos.
city2promo.addCustomer(jane);
Reemplazar la línea de código errónea con la anterior imprimirá el siguiente resultado en la consola:
Beneficios de usar los tipos genéricos
En la aplicación de ejemplo de este artículo, puede ver que una de las principales ventajas de usar tipos genéricos es la verificación de tipos en tiempo de compilación. Sin verificación de tipo, agregar a Jane a cualquiera de las tres listas de promoción no produciría un error de tiempo de ejecución, ya que Jane es, de hecho, cliente de la empresa de muebles.
Los genéricos también facilitan varias otras ventajas, incluida la reutilización y escalabilidad del código. A medida que la empresa se expande a nuevas ciudades, puede crear fácilmente nuevos tipos de objetos de promoción, basándose en gran medida en el código existente. Los tipos genéricos también le permiten crear código eficiente, que es una prioridad principal en el proceso de desarrollo de software.