2009-12-19 156 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」並獲取字段的值而不是名稱。