我有两个Java类:A类和B类,都在同一个包中。现在我在B类中创建了两个A类对象,现在从A类中我想要在类B中声明的A类对象的名称。
我该怎么做?
答案 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类对象的更多信息,那么我们可以更好地回答您的问题。
欢呼声。