2013-05-07 107 views
0

我想在泛型類中生成隨機數字號。 用戶應該能夠從大部分數字實現中進行選擇。 在從Long到Byte的投射情況下,我的方法是否安全? 我不知道發生了什麼事,像這樣低調。它會導致什麼數字? 它會找到均勻分佈的數字嗎?在泛型類中生成隨機數

@SuppressWarnings("unchecked")  
public class Test<I extends Number> 
    { 
     SecureRandom random = new SecureRandom(); 
     I id = (I) random.nextLong(); 
     while(Test.has(id)) 
     { 
      id = (I) random.nextLong(); 
     } 
    } 
+0

我敢肯定,你會得到在這裏拋出異常。如果「我是你製作的一些自定義課程怎麼辦?通過一切想法,你應該爲自己嘗試。 – 2013-05-07 17:43:49

+0

請問這個班的目的是什麼? – 2013-05-07 17:49:08

+0

同意w/r/t的目的....創建Number實例而不是基元的隨機數生成器將會慢得多。 – rolfl 2013-05-07 17:52:15

回答

1

Java Number類並不是真的爲這種泛型類的使用而設計的。你不能像你試圖去做的那樣;沒有辦法(特別是在type erasure之後)Java可以知道你想要完成什麼。沒有自動裝箱,例如,如果IAtomicInteger,BigDecimal等(不是那種投射是首先調用自動裝箱的方法)。

我建議你重新設計你的應用程序,這樣它就不會像你提議的類那樣依賴這樣一個野獸。這只是不會工作。

+0

只要隨機長度在期望值範圍內,像字節等 但是,如果我只是讓它循環一個有效的演員陣容,我擔心一個非常昂貴的身份證搜索時,投入長到字節。 – 2013-05-07 18:05:22

+0

@JamieFlowers - 您可以使用'HashSet'來存儲您的密鑰。無論您是存儲「字節」還是「長」鍵,查找成本基本相同(並且相當低)。 – 2013-05-07 18:08:20