0

ジェネリック クラスでランダムな 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();
       }
    }
4

2 に答える 2

1

JavaNumberクラスは、この種のジェネリック クラスを使用するようには実際には設計されていません。あなたがやろうとしているようにキャストすることはできません。Java が何を達成しようとしているのかを知る方法はありません (特にtype eraseの後)。たとえば、 if Iis AtomicIntegerBigDecimalなどの自動ボクシングはありません (そもそもキャストが自動ボクシングを呼び出す方法ではない)。

提案されたクラスのような獣に依存しないように、アプリケーションを再設計することをお勧めします。それはうまくいきません。

于 2013-05-07T17:54:16.630 に答える
0

目的が一意の ID を取得することだけである場合は、リンクに示されているアプローチを試してください (方法 2 はあなたのアプローチに似ています)。

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

于 2013-05-07T17:58:42.203 に答える