假設有一個名爲Node的類和另一個名爲Table的類。一個節點對象可以創建一個Table對象。顯然,Table類的構造函數被調用。是否可以從Table構造函數中獲取對創建此Table實例的Node對象的引用?一種方法是如果在創建對象時強制Node對象將「this」作爲參數傳遞給Table構造函數。有沒有其他的方式沒有參數需要傳遞?獲取正在嘗試創建的對象的引用
2
A
回答
1
獲取對Java語言中「調用」對象(調用方法,構造函數等的實例)的引用的唯一方法是將「this
」對象引用傳遞給需要的「receiver」方法知道。沒有其他方式使用普通Java,AFAIK。
2
我相信你可以使用Thread.getCurrentThread.getStackTrace()來訪問調用堆棧並找出調用它的類名稱。例如
Thread.getCurrentThread().getStackTrace()[1].getClassName();
但是,如果你想訪問該對象的實例,那麼我認爲訪問它的唯一方法是將'this'傳遞給構造函數。
0
這是一個完整的例子
public class GivesNameOfCallingClass {
//constructor
public GivesNameOfCallingClass() {
try {
throw new Exception("Error");
}
catch (Exception e) {
System.out.println(e.getStackTrace()[1].getClassName());
}
}
}
而且測試類
public class GetNameOfCallingClassTest {
public static void main(String[] args) {
new GivesNameOfCallingClass();
}
}
相關問題
- 1. 嘗試創建用戶定義對象的列表,獲取NullPointerException
- 2. 我正在嘗試從主對象中獲取對象
- 3. 嘗試從(匿名類)對象中獲取屬性/字段linq正在創建
- 4. Salesforce.com:System.NullPointerException:嘗試取消引用空對象
- 5. System.NullPointerException:嘗試取消引用空對象
- 6. 嘗試取消引用空對象Salesforce
- 7. 嘗試獲取不爲空的對象
- 8. 嘗試獲取非對象的屬性
- 9. Json_decode引發「嘗試獲取非對象的屬性」
- 10. Unity獲取用不同腳本創建的對象的引用
- 11. 嘗試上的空對象引用
- 12. 嘗試「上的空對象引用
- 13. 嘗試上的空對象引用
- 14. 嘗試在空對象引用
- 15. 嘗試在空對象引用
- 16. com.android.volley.VolleyError:java.lang.NullPointerException:嘗試在對象引用
- 17. 錯誤 - 嘗試在空對象引用
- 18. 嘗試在空對象引用
- 19. 嘗試在空對象引用
- 20. 嘗試在空對象引用
- 21. 嘗試在空對象引用
- 22. 創建對象的引用
- 23. 創建對象的引用
- 24. 嘗試從返回的對象獲取非對象的屬性
- 25. 獲取API的PHP嘗試獲取非對象的屬性
- 26. 嘗試對空對象引用
- 27. 獲取訪問對象#嘗試
- 28. 嘗試寫入對象時獲取NotSerializableException
- 29. PHP嘗試獲取有效對象的非對象屬性
- 30. 嘗試創建ACL時獲取ORA-46212
讓大家知道,如果你是如此能夠訪問一個對象,這將是一個糟糕的設計選擇。可讀性以及表現。這會造成不必要的開銷並且混淆你的代碼。 –