2009-12-19 5 views
1

J'avais deux classes Java: classe A et classe B, les deux dans le même paquet. Maintenant, j'ai fait deux objets de classe A dans la classe B, et maintenant à partir de la classe A, je veux que le nom des objets de la classe A soit déclaré dans la classe B.
Comment faire?Comment obtenir le nom d'objet de la classe?

+0

N'est-ce pas une simple reformulation de l'autre question que vous avez posée récemment? http://stackoverflow.com/questions/1932164/how-to-get-the-object-reference-of-a-class – abyx

Répondre

2

Une méthode serait pour la classe B pour passer un « nom » de la Une instance au constructeur de A:

public class A { 
    public A(String name) { 
     this.name = name; 
    } 
    private final String name; 
} 

De cette façon, chaque instance de A va connaître le nom qu'il a été attribué (par quiconque l'a construit).

Notez qu'il n'y a aucun moyen pour A de trouver le nom de la variable qui est actuellement utilisée pour s'y référer. En effet, les variables de référence peuvent être affectées à volonté:

A foo = new A(); // A's name could be considered to be "foo" 
A bar = foo;  // now, is A's name "foo" or is it "bar"? (It's both!) 
foo = null;  // and now, it's only referred by "bar". 
0

Voulez-vous le 'nom' des objets ou des références aux objets? Vous pouvez demander aux constructeurs de classe B d'enregistrer tous les objets créés avec la classe A. Si vous pouvez fournir plus d'informations sur ce que vous voulez faire avec les objets de classe B dans la classe A, nous pourrons peut-être mieux répondre à votre question.

acclame.

1

Vous pouvez faire quelque chose comme ceci:

public class NameRetriever { 
    public static List<String> retrieveNames(Class<?> ownerClass, Class<?> clazzToFind) { 
     List<String> names = new ArrayList<String>(); 
     for (Field field : ownerClass.getDeclaredFields()) { 
      if (field.getType().getName().equals(clazzToFind.getName())) { 
       names.add(field.getName()); 
      } 
     } 
     return names; 
    } 
} 

NameRetriever.retrieveNames(ClassB.class, ClassA.class); 

Ce trouverait toutes les variables membres de type ClassA contenus dans la classe ClassB. Si vous souhaitez obtenir les valeurs d'un objet instancié, vous pouvez remplacer le paramètre ownerClass par 'Object object' et obtenir la valeur du champ au lieu du nom.

Questions connexes