Java genérica conocimientos básicos y preguntas de la entrevista relacionada con la operación

. ¿Por qué utilizar un genérico (siguientes problemas)?
1): almacenar cualquier tipo de datos de la colección, pero de tipo Object se extraen, en este momento tienen una fuerte rotación.
2): conjunto de restricciones de elementos almacenados debe ser el mismo tipo de datos (el mismo tipo de datos se puede comparar, como clase TreeSet).
3): una clase de punto de diseño (punto) para encapsular la posición de coordenadas, la posición de coordenadas requiere para apoyar el tipo String tipo .Integer / doble.

? En segundo lugar, ¿cuál es genéricos
Los genéricos (GenericType), desde Java5 comenzó a apoyar la nueva sintaxis:
1):. extensa tipo genérico
2): Código de tipo de plantilla de incertidumbre, que se llaman a las secciones del código, especificar el tipo de persona que es lo.

Tres genéricos:
Aquí Insertar imagen Descripción
clases genéricas: directamente en la clase / interfaz genérica definida.
Usando genérica:
el mismo tipo antes y después garantizada.
De lista de nueva nueva = ArrayList (); // conjunto solamente almacenar el tipo de lista de cadenas el elemento
debido a que el mismo tipo de parte delantera y trasera, por lo que desde el principio salida Java7 diamante genérico sintaxis <>.
Lista list = new new ArrayList <> ();
. no existe relación de herencia genérico (error a continuación)
Lista Lista = new new ArrayList () ; // error
. Desde entonces, el uso de una colección tuvo que utilizar genéricos para restringir el tipo de los elementos de la colección
descompilar, encontrado: de hecho genérico azúcar sintáctico , la parte inferior todavía no es genérico, pero aún con un giro fuerte.
Aquí Insertar imagen Descripción
cuatro definiciones y utilizan métodos genéricos:
método genérico:. en las declaraciones de métodos genéricos
en general, como la costumbre genérica tipo de retorno del método tiene sentido, pero en este caso debe ser un genérico parámetro de configuración de entrada en.
Si no conjunto genérico de parámetros al tipo particular, el método en este momento está generalmente diseñado para volver a objeto.
ejemplo método de clase de herramientas Arrays asList ()
Aquí Insertar imagen Descripción
V. comodines genéricos y comprender solamente límites superior e inferior en la línea :( )
genéricos comodines: no sé qué tipo Cuando se recibe, este tiempo puede ser utilizado para indicar comodín desconocido ??.
En este caso, sólo recibe los datos, los datos no se puede almacenar en el conjunto.
Aquí Insertar imagen Descripción
Generics límites superior e inferior: elementos de tipo deben ser utilizados para definir la clase de X o misma subclase, X o el mismo padre.

VI y de borrado de conversión genérico:
Erase genérico:
1): Después de compilar genérico desaparecido (genérico auto-borrado);
2): Cuando el conjunto con genérico asignados sin genérico . set, el caso genérico se borra (borrar manualmente)
daños en la pila:
método genérico solo utiliza cuando tanto el uso de parámetros variables, entonces fácilmente dar lugar a problemas de contaminación de la pila.
como: clase Arrays en asList métodos: public static Lista asList (T ... a).
Aquí Insertar imagen Descripción
preguntas de la entrevista:
los genéricos 1.Java ¿Cuáles son los beneficios del uso de los genéricos es ??
genéricos es un mecanismo de tipo parametrizado. Puede ser aplicable a diversos tipos de código, de modo que más de código común de escritura, por ejemplo, el conjunto de cuadros.
Los genéricos es un tipo de tiempo de compilación del mecanismo de confirmación. Proporciona la seguridad de tipos en tiempo de compilación, y para asegurar que el tipo genérico (por lo general una colección genérica) Utilice sólo el tipo correcto del objeto sobre el que se deben evitar ClassCastException en tiempo de ejecución.

2, ¿genéricos trabajo de Java? ¿Cuál es el tipo de borrado?
Trabajo genérico depende del compilador para compilar el código fuente cuando la primera comprobación de tipos, y luego escriba el borrado y se inserta en lugar del tipo aparecen parámetros emitir las instrucciones pertinentes para lograr.
El compilador borrar todo tipo de información relevante en tiempo de compilación, por lo que cualquier tipo de información relevante no existe en tiempo de ejecución. Por ejemplo, sólo un tipo de lista de en tiempo de ejecución para representar. ¿Por qué debería borrarlo? Esto es para evitar el tipo de expansión.

3. ¿Qué es un genérico de comodines comodín-limitados y no limitada?
Tipos de comodines Limited fueron limitados. Definiendo dos comodines, uno es <? ** T ** extiende> asegurando tipo debe estar vinculado a una subclase de T ** tipo de lance, y el otro es <? ** * súper * T> asegurando clase padre T tipo debe ser menor tipo de cota ** **. tipo genérico debe ser inicializado con los tipos dentro de los límites, de lo contrario causará un error de compilación. Por otro lado <?> Representa un comodín no limitante, ya que <?> Puede ser utilizado en lugar de cualquier tipo.

4.List <? Extiende T> y List <? Super T> ¿Cuál es la diferencia entre?
Ejemplos de estas dos declaraciones son comodines Lista limitada, List <? Extiende T> que puede aceptar cualquier tipo T hereda de la lista mientras List <? super T> Lista T puede aceptar cualquier clase padre compuesta. Por ejemplo List <? Extiende Número> puede aceptar o como una lista. Puede encontrar más información en este párrafo conexión que aparece.

5. Cómo escribir un método genérico para que pueda aceptar parámetro genérico y devuelve un tipo genérico?
Para escribir un método genérico no es difícil, es necesario utilizar tipos genéricos en lugar de los tipos primitivos, como el uso de T, E o K, V y otra ampliamente reconocido tipo de marcador de posición. Ver un ejemplo de un método genérico de Java marco de las colecciones. En el caso más simple, un método genérico podría tener este aspecto:
V PUT pública (clave K, el valor V) {
retorno cache.put (clave, valor);
}

7. Escribir un programa genérico para implementar caché LRU?
Para los que les gusta la programación en Java Este es el equivalente de un ejercicio. dar una pista, LinkedHashMap caché LRU se puede utilizar para implementar un tamaño fijo, cuando la caché LRU está lleno, cuando se retira pares de clave y valor caché más antiguos. LinkedHashMap proporciona un método llamado removeEldestEntry (), se pone el método () y putAll () llamada a eliminar los pares más antiguas.

8. Puede Lista Lista pasado al método que acepta parámetros hacen?
Para cualquier persona que no están familiarizados con los genéricos, genéricos este tema Java parece confuso, porque a primera vista es un objeto de cadena, por lo que la lista se debe utilizar cuando sea necesario Lista, pero no lo es. Realmente lo que dará lugar a un error de compilación. Si a continuación en cuenta el paso de profundidad, se encuentra que Java tiene sentido, ya que la lista puede almacenar cualquier tipo de objeto, incluyendo cadena, entero, etc., mientras que la lista sólo se puede utilizar para almacenar cadenas.
Lista ObjectList;
Lista StringList;
ObjectList = StringList; // error de compilación tipos incompatibles

9.Array puede utilizar los genéricos que?
Hecho de matriz no es compatible con los genéricos, se recomienda utilizar la lista en lugar de la matriz, ya que la lista puede proporcionar el tipo de garantías de seguridad compile y matriz no puede.

11, la distinción entre tipos primitivos de Java en la lista y la lista?
La principal diferencia entre los parámetros de tipo y el tipo de original, el compilador no realiza comprobaciones de seguridad en el tipo de tipo en tiempo de compilación de la original, pero con un parámetro de tipo será comprobar, mediante el uso como el tipo de objeto, el compilador puede informar el proceso puede aceptar cualquier tipo de objeto, tal como una cadena o un número entero . Esta pregunta se hace para examinar puntos correcta comprensión del tipo genérico del original. El segundo punto de diferencia entre ellos es que puede pasar los argumentos de tipo genérico para aceptar método de tipo Lista de crudo, pero no se puede pasar de una lista a la lista de método aceptado, porque producirá un error de compilación.

¿Cuál es la diferencia entre 12, Java en la lista <?> Y la lista son?
List <?> ¿Es un tipo de lista es desconocida, pero de hecho, cualquier tipo de lista. Se puede poner Lista, Lista asignado a la lista <?>, No se puede asignar a la lista de listas.
Lista listOfAnyType <?>;
Lista listOfObject = new new ArrayList ();
Lista listOfString = new new ArrayList ();
Lista listOfInteger = new new ArrayList ();

listOfAnyType = listOfString; // legal
listOfAnyType = listOfInteger; // legal
listOfObjectType = (Lista) listOfString; // error del compilador - en convertibles tipos

13, y la distinción entre tipos primitivos de lista de.
La pregunta como "¿Cuál es la diferencia entre el tipo original y los parámetros de tipo". Con el tipo de parámetro es de tipo seguro , pero es el tipo de garantía de seguridad por el compilador, pero la lista Tipo de crudo no sea de tipo seguro. No se puede poner cualquier otro tipo de objeto de cadena fuera de tipo cadena en una lista, y se puede poner cualquier tipo de objeto almacenado en la lista original. El uso del tipo genérico con parámetros que no es necesario que sea de lanzamiento, pero para los tipos primitivos, tendrá conversiones de tipos explícitos.
ListOfRawTypes ArrayList = new nueva lista ();
listOfRawTypes.add ( "ABC");
listOfRawTypes.add (123); // esto permite que el compilador - funcionamiento anormal Shique
elemento String = (String) listOfRawTypes.get ( 0); // explícito de conversión de tipo requerido
item = (String) listOfRawTypes.get (1 ); // tirar ClassCastException, no se puede convertir debido a que el entero cadena

ListOfString ArrayList = new nueva lista ();
listOfString.add ( "ABCD");
listOfString.add (1234); // error de compilación, mejor que lanzar una excepción en tiempo de ejecución
item = listOfString.get (0); // no explícito tipo de conversión - compilador convierten automáticamente

Publicado 99 artículos originales · ganado elogios 2 · Vistas 2606

Supongo que te gusta

Origin blog.csdn.net/weixin_41588751/article/details/105299622
Recomendado
Clasificación