2

この質問を見つけましたランダムな英数字の文字列を生成する方法は? 回答には次のコードが含まれています。

public final class SessionIdentifierGenerator {
    private SecureRandom random = new SecureRandom();

    public String nextSessionId() {
        return new BigInteger(130, random).toString(32);
    }
}

そして私の質問は私が作ることができnextSessionId staticますか?

技術的にはできることはわかっていますが、意図的に非静的にしたかどうかは興味があります。おそらく著者は私の質問を読まないだろうし、彼が何を考えていたのか説明もしないだろうと私は知っている.この答え。オブジェクトを作成しても何も得られないため、このメソッドを非静的にする意味はないと思いSessionIdentifierGeneratorます。オブジェクトを作成せずに nextSessionId を呼び出すことをお勧めしSessionIdentifierGeneratorます。

4

2 に答える 2

1

はい、ご希望がstaticあればお作りできます。しかし、なぜあなたはすべきですか?

以下を読んでから、ものを作ることを再考することをお勧めしますstatic

  1. 静的変数が悪と見なされるのはなぜですか?
  2. https://www.quora.com/What-are-the-advantages-and-disadvantages-of-having-a-static-method-in-Java
  3. http://devsolvd.com/questions/java-when-to-use-static-methods
于 2015-10-22T10:09:02.880 に答える
1

はい、技術的には、メソッドを作成できますstatic。クラスはfinalとにかくでありextend、他のクラスではないため、メソッドをオーバーライドする引数はここではカウントされません。

JonKがコメントで述べたように、フィールドrandomも静的にする必要があります。SecureRandomはスレッドセーフなので、これも問題ありません。

静的メソッドの問題の 1 つは、テスト内からモックするのが難しいことです。

于 2015-10-22T10:00:25.580 に答える