6
votes

Vérifiez le nom de la classe de la référence qui détient un objet en Java

class A {
}

class B extends A {
}

class TestType {
   public static void main(String args[]) {
      A a = new B();
      // I wish to use reference 'a' to check the Reference-Type which is 'A'.
   }
}
Is is possible? If no, then please specif the reason.

2 commentaires

Vous ne pouvez pas. Le type statique de variables locales n'est pas conservé dans le bytecode ni au moment de l'exécution. (Si c'est un champ, vous pouvez utiliser la réflexion sur la classe contenant du champ pour obtenir le type de champ.)


@ Chrisjest-Young, vous devriez faire une réponse au lieu d'un commentaire.


3 Réponses :


1
votes

Si vous appelez a.getclass () code>, il vous retournera toujours une instance de classe à partir de laquelle cet objet a été créé. Dans votre cas, il est B code> de sorte qu'il vous retournera b.c.class code>.

maintenant si vous souhaitez appeler la méthode sur A code> et obtenir classe comme a.class code> alors vous ne pourrez pas le faire normalement. p>

Une sortie de sortie serait définir la méthode dans A p> p> p> P>

public static Class<A> getType() {
        return A.class;
    }


4 commentaires

Mais cette méthode aurait besoin d'ajouter à chaque classe pour la cohérence, donc lorsque GetType est appelé que la méthode serait appelée pour la classe B .


Mise à jour de la réponse pour utiliser des méthodes statiques.


Oui la solution a fonctionné. :) C'était une solution très élégante et simple.


Les méthodes statiques ne sont pas remplacées et il n'y a donc pas de problème à l'utilisation de la méthode.



3
votes

Chris Jester- Le commentaire de Young était excellent. Il dit:

Vous ne pouvez pas. Le type statique de variables locales n'est pas conservé dans le bytecode ni au moment de l'exécution. (Si c'est un champ, vous pouvez utiliser la réflexion sur la classe contenant du champ pour obtenir le type de champ.)

Voir aussi Quel est le concept d'effacement dans Generics en Java?

et http://gafter.blogspot.com/search?q== Super + type + jeton .


0 commentaires

2
votes

Vérifiez le nom de la classe de la référence qui détient un objet dans Java

vous ne pouvez pas.

  1. Il n'y a rien de tel que " la référence détenant un objet. Il pourrait y avoir zéro de telles références, ou il pourrait y avoir six gazillions d'eux.

  2. Vous ne pouvez pas l'obtenir de l'intérieur de l'objet tenu.


0 commentaires