2011-10-17 15 views
9

Estoy mirando un código Java, y este código lo veo a menudo.Foo.class ¿qué hace?

Foo.class 

¿Se está utilizando para indicar el tipo de la clase? es similar a

Foo.GetType(); 
typeof(Foo); 

en C#?

¿Para qué se está utilizando? y cual es el significado de eso?

+1

Alguna información relacionada: 'System.Type' es un tipo general en .Net, y no específico para C#. No sé si lo mismo es o no es cierto para el tipo 'Clase 'en la JVM (a diferencia del lenguaje Java en sí). –

+0

Es bastante difícil encontrar esta información proveniente de Java. Busqué "objeto de clase C#", "referencia de C# a clase" y muchos otros términos sin saber que esto se llama "Tipo" en C# - lo único que obtendrá son tutoriales e introducciones a OOP. Pero gracias por esa pregunta :-) – Mitja

Respuesta

12

Sí, Foo.class en Java es equivalente a typeof(Foo) en C#. Consulte section 15.8.2 of the JLS para obtener más información sobre los literales de clase .

Es no lo mismo que llamar GetType() en una referencia, que obtiene el tiempo de ejecución tipo de un objeto. El equivalente de Java es someReference.getClass().

Una razón por la que puede verlo más a menudo en el código de Java que en C# es en relación con los genéricos. No es del todo inusual tener algo como:

public class Generic<T> 
{ 
    private final Class<T> clazz; 

    public Generic(Class<T> clazz) 
    { 
     this.clazz = clazz; 
    } 
} 

Esto permite el acceso en tiempo de ejecución a la clase de reflexión, etc. Esto sólo es necesario en Java debido a borrado tipo, mediante el cual un objeto de un tipo genérico puede Normalmente, determina sus argumentos de tipo en el momento de la ejecución.

+0

impresionante. Gracias. – DarthVader

+0

genial. Me parece un poco gracioso que lo llamen clazz :) – DarthVader

+2

@ user177883: Bueno, esa es una convención. Otros pueden usar diferentes nombres. Es solo porque 'clase' es una palabra clave. –

2

hay una clase especial en Java llamada Clase. hereda Objeto. su instancia representa las clases y las interfaces en java runtime, y también representa enum, array, tipos primitivos de Java (booleano, byte, char, corto, int, largo, flotante, doble) y la palabra clave void. cuando se carga una clase, o JVM llama al método defineClass() del cargador de clases, entonces JVM crea un objeto Class.

Java nos permite crear un objeto Clase correspondiente de una clase de muchas maneras, y .class es uno de ellos. p.

Class c1 = String.class;