Java Genéricos: comodines en las colecciones
- extiende
- súper
- ?
Hoy les voy a explicar cómo los comodines son útiles. Para entender este concepto es un poco difícil
Ahora supongamos que tiene una clase abstracta y en eso tiene un método abstracto llamado paintObject().
Now you want to use different type of collection in every child class.
Este es el método de AbstractMain.
Aquí pasos que hemos tomado para este método abstracto principal
1. Hemos creado clase abstracta
2. En Parámetro tenemos definir T (se puede utilizar cualquier carácter) - En este caso, cualquiera que sea la clase que implemente este método, puede usar cualquier tipo de clase. ej. Clase puede implementar como método vacío paintObject (objeto ArrayList) pública o nula paintObject (objeto HashSet) pública
3. Y También hemos utilizado E se extiende MainColorTO - En este caso E se extiende MainColorTo - Es claramente significa cualquiera que sea la clase que desee usar que debe ser subclase de MainColorTo
4. Tenemos definir el método abstracto llamado paintObject (objeto T, E objectTO) --Ahora aquí lo que la clase es poner en práctica el método que el método se puede utilizar cualquier clase de primer argumento y el segundo parámetro que el método tiene que utilizar el tipo de MainColorTO
public abstract class AbstractMain<T,E extends MainColorTO> {
public abstract void paintObject(T Object,E TO);
}
Ahora vamos a extendernos por encima de la clase abstracta e implementar el método en la clase siguiente ej.
public class MainColorTO {
public void paintColor(){
System.out.println("Paint Color........");
}
}
public class RedTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("RedTO......");
}
}
public class WhiteTO extends MainColorTO {
@Override
public void paintColor() {
System.out.println("White TO......");
}
}
Ahora vamos a tomar dos ejemplos.
1.PaintHome.java
public class PaintHome extends AbstractMain<ArrayList, RedTO> {
@Override
public void paintObject(ArrayList arrayList,RedTO red) {
System.out.println(arrayList);
}
}
Ahora en PaintHome.java anterior se puede comprobar que hemos utilizado en ArrayList primer argumento (Como podemos tomar cualquier clase) y en el segundo argumento que ha usado RedTO (que es extendiendo MainColorTO)
2.PaintCar.java
public class PaintCar extends AbstractMain<HashSet, WhiteTO>{
@Override
public void paintObject(HashSet Object,WhiteTO white) {
System.out.println(Object);
}
}
Ahora en PaintCar.java anterior se puede comprobar que hemos utilizado en HashSet primer argumento (como podemos tomar cualquier clase) y en el segundo argumento que hemos utilizado WhiteTO (¿Qué está extendiendo MainColorTO)
Ponint para recordar no puede utilizar palabra clave super a nivel de clase sólo se puede utilizar la palabra clave se extiende al nivel de clase defination
public abstract class AbstractMain<P,E super MainColorTO> {
public abstract void paintObject(P Object,E TO);
}
por encima de código le dará error del compilador.
No, eso no está bien. Al menos desde el segundo párrafo de la explicación está fuera de tema. No se trata de borrado de tipo. – jrudolph
El primer párrafo tampoco está bien. Puede eliminar o agregar null a una lista como se declaró en la pregunta, también puede agregar referencias (no nulas) si el comodín está definido con un supervínculo. –