讓我們從代碼開始。在Java中打印用於調試目的的唯一對象標識
Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);
然後再在別的地方再次,或者可能是同一段代碼再次執行,可能在不同的線程。
Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);
現在上面,如果obj是同一個對象,顯然調試打印將是相同的。但是如果它們是不同的,仍然有散列衝突的機會,所以打印輸出可能即使對於不同的對象也是相同的。因此具有相同的輸出(或者更一般地說,相同的字符串)不能保證相同的對象。
問題:有沒有辦法在Java中獲得唯一的ID 字符串對於任意對象?或者更正式,給static String Id.str(Object o)
方法,以便使這是總是真:
final Object obj1 = ...;
final String firstId = Id.str(obj1);
// arbitrary time passes, garbage collections happen etc.
// firstId and obj1 are same variables as above
(firstId.equals(Id.str.obj2)) == (obj1 == obj2)
你是如何建議將這些ID從單身人士分配給對象的,這些對象將由三方對象創建? – Andremoniy
對不起,我一定錯過了他說的地方,我假設他正在定義這些課程,因此可以把他喜歡的東西放在其中。 – codeghost
嗯,一個目的就是問題中隱含的內容:查看日誌並查看打印的ID。顯然有一些解決方法,例如在可用時打印某些特定於個案的識別數據。但是當類型是'Future <>'時,這很難。所以我在問是否存在一個通用的解決方案。 – hyde