2009-12-19 122 views
1

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

+0

这不是您最近询问的另一个问题的简单表述吗? http://stackoverflow.com/questions/1932164/how-to-get-the-object-reference-of-a-class – abyx

回答

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". 
0

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

欢呼声。

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”并获取字段的值而不是名称。