2009-12-19 3 views
1

У меня было два класса Java: класс A и класс B, оба в одном пакете. Теперь я сделал два объекта класса A внутри класса B, а теперь изнутри класса A хочу, чтобы имя объектов класса A было объявлено внутри класса B.
Как это сделать?Как получить название объекта класса?

+0

Разве это не простая перефразировка другого вопроса, который вы недавно задали? http://stackoverflow.com/questions/1932164/how-to-get-the-object-reference-of-a-class – abyx

ответ

2

Один метод должен был бы для класса B, чтобы пройти «имя» A экземпляра в конструктор по:

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

Таким образом, каждый экземпляр будет знать имя его назначения (тот, кто построил его).

Обратите внимание, что A не имеет никакого способа узнать имя переменной , которая в настоящее время используется для обращения к ней. Это связано с тем, что ссылочные переменные могут быть присвоены по желанию:

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

Вы хотите, чтобы «имя» объектов или ссылок на объекты? Вы можете иметь конструкторы класса B регистрировать любые объекты, созданные с помощью класса A. Если вы можете предоставить более подробную информацию о том, что вы хотите делать с объектами класса B из класса A, тогда, возможно, мы сможем лучше ответить на ваш вопрос.

ура.

1

Вы могли бы сделать что-то вроде этого:

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); 

Это найдет все переменные-члены типа ClassA, содержащихся в классе ClassB. Если вы хотите получить значения объекта-объекта, вы можете изменить параметр ownerClass на «Объект объекта» и получить значение поля вместо имени.

Смежные вопросы