flutter series genérico de 3 dardos

¿Qué es genérico?
Los genéricos son para resolver la reutilización de clases, interfaces, métodos y soporte para tipos inciertos (verificación de tipo)

Método genérico

Primero mire el código. Suponga que tenemos requisitos de código similares en el código:

String getData(String val){
  return val;
}

int getData1(int val){
  return val;
}

Se puede ver que estos códigos se repiten. Para el código repetido, se debe resolver. Luego, el tipo genérico se puede usar nuevamente. La siguiente es la solución del tipo genérico:

T getData<T>(T val){
  return val;
}

void main(List<String> args) {
  print(getData(1));
  print(getData("test"));
  print(getData<String>("校验类型"));
}

getData (1) Este tipo no especifica el tipo y no realiza la verificación de tipo.
getData ("Verificar tipo") especifica el tipo y realiza la verificación de tipo. Si el parámetro entrante es int, se informa un error.
El código definido anteriormente verificará el tipo devuelto. Si no desea verificar el parámetro devuelto, puede escribirlo en el siguiente formato:

getData<T>(T val){
  return val;
}
Clase genérica

Primero mire los ejemplos de implementación de clases ordinarias:

class PrintClass{
  List list = new List<int>();
  void add(int value){
    this.list.add(value);
  }
  void printInfo(){
    for(var i=0; i<this.list.length;i++){
      print(this.list[i]);
    }
  }
}

void main(List<String> args) {
  PrintClass p = new PrintClass();
  p.add(1);
  p.add(10);
  p.printInfo();
}

Como vimos anteriormente, solo podemos agregar datos enteros definiendo el método de adición de clase. Si este es un problema ocasional, también debemos admitir otros tipos de datos, como cadenas, y la verificación del tipo de compatibilidad. ¿Cómo lo implementamos? Luego viene la clase genérica, directamente en el código:

class PrintClass<T>{
  List list = new List<T>();
  void add(T value){
    this.list.add(value);
  }
  void printInfo(){
    for(var i=0; i<this.list.length;i++){
      print(this.list[i]);
    }
  }
}

void main(List<String> args) {
  PrintClass p = new PrintClass<String>();
  p.add("aa");
  p.add("bb");
  p.printInfo();
}

De esta manera, especificamos directamente el nombre del tipo al definir la clase PrintClass, luego se pasará la suma de acuerdo con el tipo definido.

Publicado 159 artículos originales · 22 alabanzas · 90,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/ytuglt/article/details/105096382
Recomendado
Clasificación