Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在泛型类中生成随机数_Java_Casting_Numbers - Fatal编程技术网

Java 在泛型类中生成随机数

Java 在泛型类中生成随机数,java,casting,numbers,Java,Casting,Numbers,我想在泛型类中生成随机id号。 用户应该能够从大多数实现中进行选择。 在从Long到Byte的转换中,我的方法安全吗? 我不知道这样的沮丧会发生什么。结果会是多少? 它会找到均匀分布的数字吗 @SuppressWarnings("unchecked") public class Test<I extends Number> { SecureRandom random = new SecureRandom(); I id = (I) ran

我想在泛型类中生成随机id号。 用户应该能够从大多数实现中进行选择。 在从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();
       }
    }
@SuppressWarnings(“未选中”)
公开课考试
{
SecureRandom=新的SecureRandom();
I id=(I)random.nextLong();
while(Test.has(id))
{
id=(I)random.nextLong();
}
}

Java
Number
类并不是真正为这种通用类的使用而设计的。你不能像你想做的那样施展才华;Java不可能(特别是在这之后)知道您想要实现什么。例如,如果
I
AtomicInteger
BigDecimal
,等等,就没有自动装箱(不是说强制转换是一开始调用自动装箱的方式)


我建议您重新设计您的应用程序,这样它就不会依赖于您建议的类。这是行不通的。

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


我很确定您会在这里遇到强制转换异常。如果
I
是您定制的某个类呢?无论如何,你应该自己试一下。请问这门课的目的是什么。。。。创建数字实例(而不是原语)的随机数生成器将慢得多。这将包含在一个更大的泛型类中,该泛型类应将未使用的随机ID返回给用户,而不管为I选择了什么类。只要随机长在预期值范围内,强制转换就会起作用,像字节等。但如果我只是让它循环进行有效的强制转换,我担心在对字节进行长距离强制转换时会出现非常昂贵的id搜索。@JamieFlowers-您可以使用
哈希集来存储密钥。无论是存储
字节
还是
键,查找成本基本相同(而且相当低)。