Revisión de genéricos del punto de conocimiento de JAVA

Visión general

  • Los genéricos pueden resolver el problema de seguridad de los tipos de datos. Principio: cuando se declara la clase, se usa un identificador para indicar el tipo de un atributo en la clase o el valor de retorno y el tipo de parámetro de un método
  • Los genéricos son características nuevas agregadas después de JDK1.5

formato

1. Clase genérica
  访问权限  class 类名称<泛型,泛型...>{
    
    
        属性
        方法
  }

public class GenericDemo0<T> {
    
    

    private T t;

    public T getT() {
    
    
        return t;
    }

    public void setT(T t) {
    
    
        this.t = t;
    }

    public static void main(String args[]) {
    
    
        GenericDemo0<Integer> i = new GenericDemo0<>();
        i.setT(1);
        System.out.println("-----泛型类--->" + i.getT());

        GenericDemo0<String> str = new GenericDemo0<>();
        str.setT("泛型类");
        System.out.println(str.getT());
    }
}

Se agrega una parte de declaración de parámetro de tipo después del nombre de la clase.
La parte de declaración de parámetro de tipo de una clase genérica contiene uno o más parámetros de tipo. Los parámetros están separados por
una coma para separar un parámetro genérico, que se llama variable de tipo y se usa para especificar un identificador de nombre de tipo genérico

Creación de objeto: nombre de clase <tipo específico> nombre de objeto = nuevo nombre de clase <tipo específico> ()

2. Interfaz genérica
 interface 接口名称<泛型标识>{
    
    }

interface Gen<T> {
    
    
    T call(T t);
}

Agregue <T> después del nombre de la interfaz

3. Métodos genéricos
 访问权限 <泛型标识> 返回类型 方法名称 ([泛型标识 参数名称]

private static <T> void call(T t) {
    
    
   System.out.println("---泛型方法-->" + t);
 }

 private static <E> E[] generCall(E[] array) {
    
    
        System.out.println("---泛型方法-->" + Arrays.toString(array));
        return array;
 }

Todas las declaraciones de métodos genéricos tienen una parte de declaración de parámetro de tipo (separada por paréntesis angulares). La parte de declaración de parámetro de tipo
se puede usar para declarar el tipo de valor de retorno antes del tipo de retorno de método , y se puede usar como el parámetro real obtenido por el método genérico Marcador de posición de tipo
Tenga en cuenta que los parámetros de tipo solo pueden representar tipos de referencia, no tipos primitivos

Escriba comodín

Comodín de límite superior

? extiende se denomina comodín de límite superior, lo que hace que los genéricos de Java sean covariantes. extiende los límites del tipo padre de tipos genéricos, por lo que se llama límite superior

List<? extends TextView> textViews = new ArrayList<TextView>(); // 本身
List<? extends TextView> textViews = new ArrayList<Button>(); // 直接子类
List<? extends TextView> textViews = new ArrayList<RadioButton>(); // 间接子类
  • ¿Entre ellos? Hay un comodín, que indica que el tipo genérico de esta Lista es un tipo desconocido
  • extiende limita el límite superior de este tipo desconocido, es decir, el tipo genérico debe cumplir con las restricciones de esta extensión: su alcance no es solo todas las subclases directas e indirectas, sino también la clase padre definida por el límite superior mismo, que es TextView ; También existe el significado de implementos, es decir, el límite superior aquí también puede ser una interfaz.
Comodín inferior

? super se llama comodín de límite inferior, lo que hace que los genéricos de Java sean contradictorios. super restringe los subtipos del comodín?, por lo que se denomina límite inferior.

List<? super Button> buttons = new ArrayList<Button>(); // 本身
List<? super Button> buttons = new ArrayList<TextView>(); //  直接父类
List<? super Button> buttons = new ArrayList<Object>(); // 间接父类
  • ¿Comodín? Indica que el tipo genérico de Lista es un tipo desconocido.
  • super restringe el límite inferior de este tipo desconocido, es decir, el tipo genérico debe satisfacer las condiciones de restricción de este super. A menudo usamos métodos super in class. El alcance aquí incluye no solo las clases principales directas e indirectas de Button, sino también el límite inferior de Button. super también admite interfaz
resumen

Los genéricos de Java no admiten covarianza y contravarianza. Los tipos genéricos de Java se borrarán en tiempo de compilación

  • ¿Se puede usar comodín genérico? Se extiende para hacer que los genéricos admitan la covarianza
  • ¿Puedes usar comodines genéricos? Super para hacer que los genéricos admitan la contravarianza

Supongo que te gusta

Origin blog.csdn.net/xufei5789651/article/details/102458176
Recomendado
Clasificación