21-Genérico

Genérico

Los genéricos se agregan a Java después de JDK1.5, principalmente para resolverClassCastExceptionEl problema es que siempre habrá riesgos de seguridad durante la transformación descendente de objetos, y Java espera resolver estos problemas lentamente a través de genéricos.

El problema de los genéricos conduce a

Suponiendo que la definición describe la clase de procesamiento de coordenadas x, y, se pueden guardar tres tipos de datos:

  • Cirugía plástica
  • Punto flotante
  • Tipo de caracter

Por lo tanto, al diseñar una clase, debe considerar específicamente los tipos de atributos xey, y guardar los tres tipos de datos anteriores. El método es usar la clase Object para definir, luego existe la siguiente relación de transformación:

  • Modelado: tipo de datos básico -> empaquetado como objeto entero -> conversión automática a objeto
  • Punto flotante: tipo de datos básico -> paquete como objeto doble -> conversión automática a objeto
  • Forma de cadena: Objeto de clase de cadena -> conversión automática a Objeto;

El objeto puede aceptar todo tipo de datos, habrá graves riesgos de seguridad;

Definición básica de genéricos

Para evitar "ClassCastException", la mejor manera es evitar directamente la coerción de objetos;
por lo tanto, después de JDK1.5, se proporciona tecnología genérica. La esencia de los genéricos radica en el método o parámetro del método y el tipo de valor de retorno en la clase puede ser cambiado por el objeto Se determina dinámicamente al crear instancias.
En este momento, los marcadores de posición (etiquetas genéricas) deben estar claramente definidos en la definición de clase.

class Point <T>{
	private T x;
	private T y;
} 

En este momento, el tipo de datos de atributo en la clase no está determinado, sino que lo determina el exterior.
Sugerencia: con respecto al tipo genérico predeterminado:
debido a que los genéricos son productos posteriores a JDK1.5, ha habido muchas clases de programa integradas o interfaces ampliamente utilizadas en el desarrollo antes de esto, por lo que para garantizar que estas clases o interfaces se agreguen, el tipo genérico aún puede se utilizará, por lo que si no se establece el tipo genérico, Object se utilizará automáticamente como el tipo para garantizar la ejecución normal del programa, pero aparecerá un mensaje de advertencia durante el proceso de compilación.
Precauciones para el uso de genéricos:

  • Solo se permite establecer tipos de referencia en tipos genéricos. Si desea manipular tipos básicos ahora, debe usar clases contenedoras;
  • A partir de JDK1.7, la creación de instancias de objetos genéricos se puede simplificar paraPoint<Integer> point = new Point()

El uso de genéricos puede resolver la mayor parte del procesamiento de coerción de objetos de clase, un programa de este tipo es un diseño razonable.

Comodín genérico

Aunque los genéricos ayudan a los desarrolladores a resolver una serie de riesgos de seguridad causados ​​por la conversión forzada de objetos, los genéricos también traen un nuevo problema: el procesamiento de pases de referencia.
Pero si no configura genéricos, entonces es posible modificar sus datos en el método, por lo que necesita una solución en este momento: puede recibir todos los tipos genéricos y no puede modificar los datos internos (permitiendo el acceso), entonces debe resolverse con el comodín "?";
public void fun(Message<?> temp)
de hecho, hay dos tipos de comodines pequeños basados ​​en el "?":

  • Clase "? extiende": establece el límite superior de genéricos
    • Por ejemplo, "? Extiende Número": significa que este tipo genérico solo permite la configuración de Número o subclase Número;
  • clase "? super": establece el límite inferior de genéricos
    • Por ejemplo, "? Super String": significa que el tipo genérico solo permite el uso de String o su clase padre;

public void fun(Message<?extends Number> temp)
El comodín es un concepto importante y debe comprender la definición de este concepto. En el futuro, verá una gran cantidad de comodines cuando aprenda las bibliotecas de clases de Java.

Interfaz genérica

Además de estar definidos en la clase, los genéricos también se pueden usar en interfaces. Por ejemplo, para definir una interfaz genérica, hay dos formas de implementar una subclase de una interfaz genérica

interface IMessage<T>{
	public String echo(T t);
	
}
//实现方式一
class MessageImpl<S> implements IMessage<S>{
	public String echo(S t){
		return "ECHO" + t;
	}
}
//实现方式二:在子类实现父接口的时候直接定义出具体泛型类型
class MessageImpl implements IMessage<String>{
	public String echo(S t){
		return "ECHO" + t;
	}
}

No es complicado en cuanto a concepto e implementación, pero habrá una gran cantidad de interfaces genéricas en el futuro, en este momento es necesario tener claro que hay dos principios de implementación.

Método genérico

En la clase de programa anterior, en realidad puede encontrar que si escribe una marca genérica en un método en una clase genérica, se le llama método genérico.
Cabe señalar que el método genérico no tiene que aparecer en la clase genérica, es decir, si un tipo genérico no está definido en una clase, también puede utilizar el método genérico. Este tipo de enfoque genérico es muy común cuando se desarrollan proyectos posteriormente.
Si un proyecto tiene demasiadas interfaces, puede utilizar interfaces de extensión genéricas.

Supongo que te gusta

Origin blog.csdn.net/MARVEL_3000/article/details/111400726
Recomendado
Clasificación