2011-10-17 4 views
9

Je regarde un code Java, et il y a ce code que je vois souvent.Foo.class que fait-il?

Foo.class 

Ceci est utilisé pour indiquer le type de la classe? est-ce similaire à

Foo.GetType(); 
typeof(Foo); 

en C#?

Dans quel cas est-il utilisé? et quel en est le sens?

+1

Certaines informations liées: 'System.Type' est un type général dans .Net, et non spécifique à C#. Je ne sais pas si le même est ou n'est pas vrai pour le type 'Class' dans la JVM (par opposition au langage Java lui-même). –

+0

Il est assez difficile de trouver cette information venant de Java. J'ai cherché "C# class object", "C# reference to class" et beaucoup d'autres termes ne le connaissant pas s'appellent 'Type' en C# - les seules choses que vous obtiendrez sont des tutoriels et des introductions à OOP. Mais merci pour cette question :-) – Mitja

Répondre

12

Oui, Foo.class en Java est équivalent à typeof(Foo) en C#. Voir section 15.8.2 of the JLS pour plus d'informations sur littéraux de classe.

Il est pas la même chose que d'appeler GetType() sur une référence, qui obtient le type de temps d'exécution d'un objet. L'équivalent Java de cela est someReference.getClass().

L'une des raisons pour lesquelles vous le voyez plus souvent en code Java qu'en C# est en relation avec les génériques. Ce n'est pas tout à fait inhabituel d'avoir quelque chose comme:

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

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

Cela permet d'accéder exécution temps à la classe de réflexion etc. Cela est nécessaire en Java en raison de effacement de type, par lequel un objet d'un type générique peut Ne détermine normalement pas ses arguments de type au moment de l'exécution.

+0

génial. Merci. – DarthVader

+0

génial. Je trouve ça un peu marrant qu'ils l'appellent clazz :) – DarthVader

+2

@ user177883: Eh bien, c'est une convention. D'autres peuvent utiliser des noms différents. C'est juste parce que 'class' est un mot-clé. –

2

il existe une classe spéciale en Java appelée Classe. il hérite Objet. son instance représente les classes et les interfaces dans java runtime, et représente aussi les types Java enum, array, primitive (booléen, byte, char, short, int, long, float, double) et le mot clé void. Lorsqu'une classe est chargée ou que la méthode defineClass() de la classe loader est appelée par JVM, JVM crée un objet Class.

Java nous permet de créer un objet Class correspondant d'une classe de plusieurs façons, et .class en fait partie. par exemple.

Class c1 = String.class; 
Questions connexes