Qu'est-ce que .class
signifie-t-il en Java ? Par exemple, si je crée une classe appelée Print
. Que fait Print.class
retour ?
Réponses
Trop de publicités?Quand vous écrivez .class
après un nom de classe, il fait référence au littéral de la classe - java.lang.Class
objet qui représente des informations à propos de classe donnée.
Par exemple, si votre classe est Print
entonces Print.class
est un objet qui représente la classe Print
au moment de l'exécution. C'est le même objet qui est renvoyé par la fonction getClass()
de toute instance (directe) de Print
.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
.class
est utilisé lorsqu'il n'y a pas d'instance de la classe disponible.
.getClass()
est utilisé lorsqu'une instance de la classe est disponible.
object.getClass()
renvoie la classe de l'objet donné.
Par exemple :
String string = "hello";
System.out.println(string.getClass().toString());
Cela produira un résultat :
class java.lang.String
C'est la classe de l'objet chaîne :)
Pour clarifier, cette méthode '.class' ne fait pas référence au fichier bytecode que vous voyez après avoir compilé du code java, ni à une confusion entre les concepts de classe et d'objet dans la théorie de la POO.
Cette méthode '.class' est utilisée en Java pour le code Reflection. En général, vous pouvez rassembler les méta-données de votre classe telles que le nom complet de la classe, la liste des constantes, la liste des champs publics, etc, etc.
Consultez ces liens (déjà mentionnés ci-dessus) pour obtenir tous les détails :
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html
Normalement, vous ne prévoyez pas d'utiliser Reflection immédiatement lorsque vous commencez à construire votre projet. C'est quelque chose dont vous savez que vous avez besoin après avoir essayé de gérer un code déjà fonctionnel. Souvent, vous en avez besoin pour gérer plusieurs instances de votre programme. Peut-être voulez-vous identifier chaque " clone " particulier pour déterminer si quelque chose est déjà défini, ou compter le nombre de fonctions, ou simplement enregistrer les détails d'une instance particulière de votre classe.
Si une instance d'un objet est disponible, la manière la plus simple d'obtenir sa Classe est d'invoquer Object.getClass()
Le site .class
Syntaxe
Si le type est disponible mais qu'il n'y a pas d'instance, il est possible d'obtenir une Classe en ajoutant .class
au nom du type. C'est également le moyen le plus simple d'obtenir la classe d'un type primitif.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
S'il n'y a pas d'instance disponible, alors .class
est utilisée pour obtenir l'objet Class correspondant à une classe, sinon vous pouvez utiliser la méthode getClass() pour obtenir l'objet Class. Puisqu'il n'existe pas d'instance du type de données primitif, nous devons utiliser la méthode .class
syntaxe pour les types de données primitifs.
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
- Réponses précédentes
- Plus de réponses