La vida en la reflexión, por genéricos de Java

Ayer, un colega le preguntó UserService, XxxService llama al Dao de inserción, actualización ... ..., éstos código duplicado, no hay forma de llegar a ser flexibles en?

 

Coincidencia, y que comparten el tema coincidió, el secreto, mucho menos las soluciones, que es cuando no hubiera pasado nada, reintroducido el tema de hoy (Wuzui ríe).

 

Quiero transformación de personal de I + D, de vez en cuando sabor de código fuente de Java, la agricultura lugar de trabajo bien yardas, de vez en cuando también se verá a proyectos de infraestructura de generación. De hecho, si usted comenzó a ir de puerta mono, o el hardcore dios de la guerra, la participación que actualmente más o menos se han escuchado, preocupado, demasiado confuso e incluso utilizado.

 

Está bien, pequeño banco listo, vamos a hablar juntos, nos fijamos en el código fuente, el proceso puede tomar para evitar la arquitectura de Java no está abierto los E, T,? Y otras letras se ¿Qué quiere decir?

 

En primer lugar el conocimiento acerca de la ciencia, lo que es genérico? ¿Qué concepto de chat, directamente sobre el código, siga recto, a partir de JDK 1.8 a cabo recogiendo fuente puntual, con una cara a cara genérica mixto, a Lian Shu.

 

1 . 

¿Qué es E?

 

código fuente E JDK se puede decir en todas partes, se habla sobre la fuente de ArrayList.

public class ArrayList <E> extiende AbstractList <E>
        Lista implementos <E>, acceso aleatorio, Cloneable, java.io.Serializable {
    
    / **
     * Añade el elemento especificado al final de esta lista.
     *
     * @Param e elemento que se debe añadir a esta lista
     * @Return <tt> true </ tt> (según lo especificado por {colección @link # add})
     * /
    add public boolean (E e) {
        ensureCapacityInternal (tamaño + 1); // Incrementos modCount !!
        elementData [tamaño ++] = e;
        return true;
    }
    // ... más código ...
}

  

这个 E 在此处用来创建与初始 ArrayList 的类型,其实我们可以把它换成实际的类型,举个栗子:

 

640? Wx_fmt = png

 

E encontró compilador será reemplazado por un tipo de bienes, de hecho, es decir, cuando creamos ArrayList <String>, entonces el complemento correspondiente () a su vez, add (String e); cuando creamos ArrayList <Dog>, a continuación, complemento correspondiente () se convierte en complemento (perro e).

 

Pero a menudo fuera tan poco atento a escribir, por lo que, de hecho, no quiero escribir, mono programa de corazón amargo, de hecho, que tenía una pista (Wuzui ríe).

 

640? Wx_fmt = png

 

Esto explica por qué escribir código, el compilador no siempre a menudo en el pasado, siempre hay advertencias, quién hemos definido tipo de cadena, pero tenemos que ir y lo puso en un perro.

 

La tortura del alma: sólo el uso de "E" para representarlo? ( Cerrar colegas realmente me hicieron esta pregunta, contesto esto una vez más en serio )

 

De hecho, podemos utilizar cualquier cadena legal identificador Java, pero todo el mundo está representado por una sola letra, se ha convertido en un hábito, y E también representa el significado de los elementos elemento de la colección tan a menudo utilizado para representar E, pero gran fuente probabilidad se encontrará con la letra T.

 

2. 

¿Qué es T?

public static <T se extiende Comparable <? Super T >> vacío especie (List <T> lista) {
    list.sort (null);
}

  

El extracto anterior del JDK 1.8 Colecciones fuente, nos encontramos con la "T", sino también "?" Signo de interrogación dejamos a un lado por el momento, centrándose charla "T".

 

Ver dos partes, en el que la primera porción <T se extiende Comparable> medios que T debe implementar Comparable ( que es el foco, que es el foco, que es el foco ), una segunda parte del método en la referencia de tipo List <T> lista ( ), que sólo se refiere al tipo parametrizado de lista comparable heredado.

 

De hecho, es difícil de entender, como bien podría recoger una castaña con la comprensión.

 

640? Wx_fmt = png

 

Escoger de una fuente en el JDK 1.8 fuente de cuerda, la cuerda se sustituyen en las Colecciones del método Sort, reemplazado por T Wu probarlo y ver si está bien? ! La sustitución de variables matemáticas que hemos aprendido, no va a subir.

 

640? Wx_fmt = png

 

Pero el desarrollo real no se ha encontrado en la situación en el mapa, durante el perro ordenar la lista, se le da la vida y la muerte! ¡Error! ! La razón se debe a que desea ordenar de perro, debemos poner en práctica comparable, sólo puede ser ordenada.

 

Bueno, T no quiere hablar con usted, y todavía hablar de esto ahora signo de interrogación.

 

3.

"? " Signo de interrogación es lo que?

 

signo de interrogación, ver esta estimación se verá obligado a mirar ignorantes, de hecho, desconocido, en nombre de diez mil tipos de posibilidades en Java es los caracteres comodín.

 

640? Wx_fmt = png

 

A continuación, nos fijamos en la cita anterior del JDK 1.8 Colecciones fuente, de modo comparable <? Super T> comparable representa el parámetro de tipo debe ser el padre de T o de tipo T, que puede haber confundido, y luego tirar o código de barras punto.

 

640? Wx_fmt = png

 

Ver los resultados no lo hizo, porque el perro para la clasificación, una especie de tipo perro o gato debe ser del tipo de los padres, pasamos una cadena, por supuesto, no está compilado por usted, o desea cambiar perro Objeto mí mismo para tratar de ver ver el efecto, que no es manifestación. Pero la conclusión es que decir acerca de: Comparable Comparable representa el parámetro de tipo debe ser una matriz de tipo T o T <Super T?>.

 

Mencionó <? Super T>, que tiene que mencionar mencionar <? Extiende T>, de hecho, siempre que el anterior dado cuenta, esto también es muy clara, los signos de interrogación representan la herencia e implementar T , no castañas arrojados framework de código encontró saber qué quiere decir en la línea.

 

4.

Resumen rebelde.

 

De hecho, una compilación de inspección genérico, es posible prevenir eficazmente un perro en un mar, que se divide en clases utilizando el método genérico y el uso genérico, en el que E se utiliza principalmente para una colección de elementos, además de la gran E parte es T, entonces Java ha introducido un carácter comodín es un signo de interrogación, pero se puede utilizar cualquier identificador Java válidos representan, no se enreden, no se enredo, no enredar.

 

Una vez dicho esto, todavía no hemos resuelto los problemas de apertura ah? Hombre de pocas palabras, dijo, tirar directamente el código, no entienden que no importa, preste atención a entender las letras de arriba de la línea, el siguiente código compartido con un amigo en necesidad (¡Vaya que fui, y salió letras D).

@Transactional (readOnly = true)
CrudService clase abstracta público <D extiende CrudDao <T>, T se extiende DataEntity <T >> extiende BaseService {
   
   / **
    * Objeto capa de persistencia
    * /
   @Autowired
   DAO D protegido;
   
   / **
    * Obtener datos de una sola
    * @Param entidad
    * @regreso
    * /
   pública t get (T entidad) {
      dao.get (entidad) de retorno;
   }
   
   / **
    * datos de la lista de consultas
    * @Param entidad
    * @regreso
    * /
   Lista pública <T> findList (la entidad T) {
      retorno dao.findList (entidad);
   }
   
   / **
    * Consulta de datos paginado
    * objetos de página página @Param
    * @Param entidad
    * @regreso
    * /
   Página público <T> BuscarPágina (Página <T> página, T entidad) {
      entity.setPage (página);
      page.setList (dao.findList (entidad));
      Página de retorno;
   }

   / **
    * Guardar los datos (inserción o actualización)
    * @Param entidad
    * /
   @Transactional (readOnly = false)
   public int Guardar (la entidad T) {
      si (entity.getIsNewRecord ()) {
         entity.preInsert ();
         dao.insert (entidad) de retorno;
      }más{
         entity.preUpdate ();
         dao.update (entidad) de retorno;
      }
   }
   
   / **
    * Eliminación de Datos
    * @Param entidad
    * /
   @Transactional (readOnly = false)
   int público de eliminación (la entidad T) {
      dao.delete (entidad) de retorno;
   }
}

 

5.

Bueno, tú aquí hoy, con la esperanza de comprender su confusa; esperanza de que en el camino para que la ayuda a través del desorden. Si se siente un poco de ayuda, busque en segundos como un loco hacia adelante para compartir, porque cada vez que comparten, en serio como el aliento y amor.

 

 

Supongo que te gusta

Origin www.cnblogs.com/socoool/p/12629774.html
Recomendado
Clasificación