在泛型类中生成随机数

时间:2013-05-07 17:38:06

标签: java casting numbers

我想在泛型类中生成随机id号。 用户应该能够从大多数Number实现中进行选择。 在从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();
       }
    }

2 个答案:

答案 0 :(得分:1)

Java Number类实际上并不是为这种泛型类使用而设计的。你不能像你想要的那样施展;没有办法(特别是在type erasure之后)Java可以知道你想要完成什么。例如,如果IAtomicIntegerBigDecimal等,则没有自动装箱(不是说铸造是首先调用自动装箱的方式)。

我建议你重新设计你的应用程序,这样就不会像你提出的类那样依赖这样的野兽了。它不会起作用。

答案 1 :(得分:0)

如果您的目标只是获取唯一ID,请尝试链接中给出的方法,(方式2与您的方法类似)

http://www.javapractices.com/topic/TopicAction.do?Id=56