2013-05-07 106 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