2009-07-20 83 views
2

在java中,您可以獲得一個對象的unique string作爲字符串的對象引用?

你如何在as3中做到這一點?

+0

只要是明確的,Java的hashCode()方法是不完全的 「唯一」 ......哈希衝突仍然可以CAU使不同的對象返回相同的hashCode()值。 – 2009-07-20 04:19:45

+0

這是一個有用的頁面(http://www.morearty.com/blog/2008/07/28/actionscripts-different-ways-to-convert-an-object-to-a-string/),但結果不是唯一的......實際上,對於給定類型的對象,大部分是完全相同的。 – jedierikb 2009-07-20 04:57:27

回答

3

與java線程上的響應相同,這是作爲flex SDK一部分的唯一ID生成器。這在mx.utils.UIDUtil下找到,它工作起來相當簡單。

var ID:String = UIDUtil.createUID(); 

希望這會有所幫助。

+0

另外在flex中,在mx.utils.NameUtil中有createUniqueName – jedierikb 2009-07-29 13:35:53

0

您可以嘗試使用第三方哈希函數(如md5或sha1)。 Java中對象的哈希碼(順便說一下C#)也是由哈希函數生成的。 Here's one I found on Google

希望這會有所幫助。

3

你可以利用這一點,來獲得獨特的UINT ...如果你想,它轉換爲字符串... :-P

package { 
    import flash.utils.Dictionary; 
    public class ObjectUIDUtil { 
     private static var _uids:Dictionary = new Dictionary(true); 
     private static var _cter:uint = 1; 
     public static function getUID(obj:Object):uint { 
      var ret:uint = _uids[obj]; 
      return (ret == 0) ? (_uids[obj] = _cter++) : ret; 
     } 
    } 
} 

請注意,這可能甚至沒有必要由於flash.utils.Dictionary允許使用對象爲直接鍵...

格爾茨

back2dos

+0

我很好奇,在普通對象上使用'Dictionary'有什麼優勢? (我真的不知道,很感興趣)。 – Marty 2012-06-06 06:47:27

+1

這裏的問題是,如果您使用任何值作爲Object的關鍵字,則該值將轉換爲字符串,並且默認情況下,相同類型的對象具有相同的字符串表示形式,因此您將獲得相同的ID同一班級的每個實例。雖然Dictionary將'String'「1」和「int」作爲同一個關鍵字,但它將根據它們的標識區分非原始對象,「Dictionary」在很大程度上不會修改該值。 – back2dos 2012-06-06 11:01:51