2009-07-07 8 views

Respuesta

33

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); 
+0

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. –

+5

... (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í. –

14

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

7

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 .

Cuestiones relacionadas