¿Por qué es genérico el Class<T>
de Java?¿Por qué es genérica la clase <T> de Java?
Respuesta
Así que los métodos escritos genéricos se pueden utilizar -
Class<Foo> klass = Foo.class;
Foo f = klass.newInstance();
Foo f = klass.cast(Object);
Aquí es un razonable buen resumen de las ventajas: http://download.oracle.com/javase/tutorial/extra/generics/literals.html
Hay una breve mención de esto en la sección Generics de la versión 1.5 de la guía de idioma:
Sorprendentemente, la clase Class ha sido generada. Los literales de clase ahora funcionan como tokens de tipo, proporcionando información de tipo de tiempo de ejecución y tiempo de compilación. Esto permite un estilo de fábricas estáticas ejemplificado por el método getAnnotation en la nueva interfaz AnnotatedElement:
<T extends Annotation> T getAnnotation(Class<T> annotationType);
Este es un método genérico. Se deduce el valor de su parámetro de tipo T a partir de su argumento, y devuelve una instancia apropiada de T, como se ilustra en el siguiente fragmento:
Author a = Othello.class.getAnnotation(Author.class);
Antes de los genéricos, que habría tenido que emitir el resultado para el autor También habría tenido ninguna manera de hacer el cheque compilador que el parámetro real representa una subclase de anotación
La verdadera razón está dada por Neil Gafter:
Cuando añadimos los genéricos de Java en JDK5, Cambié la clase java.lang.Class para convertirme en un tipo genérico. Por ejemplo, el tipo de String.class ahora es Clase < String>. Gilad Bracha acuñó el término tipo tokens para esto. Mi intención era habilitar un estilo particular de API, , que Joshua Bloch llama THC, o Typesafe Heterogenous Container .
- 1. clase genérica funtor en Java
- 2. ¿Por qué la clase String es definitiva?
- 3. ¿Por qué es {} <función() {}?
- 4. Java implementa la interfaz genérica de una clase anónima
- 5. ¿Qué significa la clase <?> en Java?
- 6. Variable de instancia genérica en la clase no genérica
- 7. Genéricos de Scala: ¿por qué no puedo crear objetos parametrizados dentro de la clase genérica?
- 8. La adquisición de tipo de clase genérica
- 9. ¿Para qué es la clase Comparer <T>?
- 10. anidada genérica en una clase genérica
- 11. ¿Por qué es imposible declarar métodos de extensión en una clase genérica estática?
- 12. ¿Por qué mi clase no es aceptable?
- 13. C# restricción genérica donde no es clase?
- 14. Clase de tienda genérica en campo en Java
- 15. otra java pregunta genérica
- 16. cadena genérica de java a <T> analizador
- 17. clase genérica de
- 18. ¿Qué es una clase de controlador? (Java)
- 19. "LinkedList no es genérica" error de Java
- 20. ¿Por qué es importante la codificación segura de Java?
- 21. ¿Por qué esta asignación genérica autorreferencial es ilegal?
- 22. ¿Por qué (?! ^) Es equivalente a (? <! ^)?
- 23. Monitor.TryEnter con clase genérica
- 24. DebuggerDisplay en clase genérica
- 25. ¿Qué es la Lista <?> en Java (Android)?
- 26. Mostrando clase genérica, por ejemplo, Tabla <String> en xml comentarios en visual studio
- 27. En algunos códigos Java, ¿por qué la clase Deck extiende la clase de la Tarjeta?
- 28. referencia no genérica a resultados de la clase genérica de tipos de retorno no genéricos
- 29. Java Tipo extraño retorno genérica
- 30. Javadoc al extender la clase genérica con la clase no genérica
Advertencia para cualquiera que crea que esta respuesta es correcta porque fue aceptada: Esto no puede ser correcto porque el código no se compila. 'klass' no está inicializado antes de ser utilizado. –
... (seguimiento): Observe que el código que se compila, a saber, 'Clase klass = Foo.class;' - pide la pregunta original, porque 'Foo.class' ya proporciona la información necesaria. Sin embargo, la capacidad de usar métodos genéricos es la respuesta correcta; simplemente no está claro en el ejemplo dado aquí. –