Как получить имя объекта класса? - PullRequest
1 голос
/ 19 декабря 2009

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

Ответы [ 3 ]

2 голосов
/ 19 декабря 2009

Один из методов для класса B - передать «имя» экземпляра A в конструктор 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".
1 голос
/ 19 декабря 2009

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

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 на «Object object» и получить значение поля вместо имени.

0 голосов
/ 19 декабря 2009

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

веселит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...