Java 在泛型类中生成随机数
我想在泛型类中生成随机id号。 用户应该能够从大多数实现中进行选择。 在从Long到Byte的转换中,我的方法安全吗? 我不知道这样的沮丧会发生什么。结果会是多少? 它会找到均匀分布的数字吗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
@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();
}
}
JavaNumber
类并不是真正为这种通用类的使用而设计的。你不能像你想做的那样施展才华;Java不可能(特别是在这之后)知道您想要实现什么。例如,如果I
是AtomicInteger
,BigDecimal
,等等,就没有自动装箱(不是说强制转换是一开始调用自动装箱的方式)
我建议您重新设计您的应用程序,这样它就不会依赖于您建议的类。这是行不通的。如果您的目标只是获得唯一的ID,请尝试链接中给出的方法(Way-2与您的方法类似)
我很确定您会在这里遇到强制转换异常。如果
I
是您定制的某个类呢?无论如何,你应该自己试一下。请问这门课的目的是什么。。。。创建数字实例(而不是原语)的随机数生成器将慢得多。这将包含在一个更大的泛型类中,该泛型类应将未使用的随机ID返回给用户,而不管为I选择了什么类。只要随机长在预期值范围内,强制转换就会起作用,像字节等。但如果我只是让它循环进行有效的强制转换,我担心在对字节进行长距离强制转换时会出现非常昂贵的id搜索。@JamieFlowers-您可以使用哈希集来存储密钥。无论是存储字节
还是长
键,查找成本基本相同(而且相当低)。