如何获取类的对象名称?

时间:2009-12-19 05:30:51

标签: java

我有两个Java类:A类和B类,都在同一个包中。现在我在B类中创建了两个A类对象,现在从A类中我想要在类B中声明的A类对象的名称。
我该怎么做?

3 个答案:

答案 0 :(得分:2)

一个方法是让B类将A实例的“名称”传递给A的构造函数:

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

通过这种方式,A的每个实例都知道它被分配的名称(无论是谁构造它)。

请注意,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 :(得分: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);

这将找到包含在ClassB类中的ClassA类型的所有成员变量。如果要获取实例化对象的值,可以将ownerClass参数更改为“Object object”并获取字段的值而不是name。

答案 2 :(得分:0)

您想要对象的“名称”还是对象的引用?您可以让B类构造函数注册使用A类创建的任何对象。如果您可以提供有关A类中B类对象的更多信息,那么我们可以更好地回答您的问题。

欢呼声。