2

我发现了这个问题How to generate a random alpha-numeric string? 答案包含以下代码:

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

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

我的问题是我能做到nextSessionId static吗?

我知道从技术上讲我可以,但我很好奇它是否是故意非静态的。我知道作者可能不会阅读我的问题,也不会向我解释他对这个问题的反应是什么,但也许有一些我不知道的事情,有人可以向我解释背后的原因这个答案。我认为使此方法成为非静态方法没有意义,因为我从创建SessionIdentifierGenerator对象中一无所获。我更喜欢在不创建SessionIdentifierGenerator对象的情况下调用 nextSessionId。

4

2 回答 2

1

是的,从技术上讲,您可以制作该方法static。无论如何,该类final并没有extend任何其他类,因此覆盖该方法的参数在这里不计算在内。

正如JonK在评论中提到的,该random字段也必须是静态的。因为SecureRandom是线程安全的,所以这也不是问题。

静态方法的一个问题是,在测试中进行模拟会更加困难。

于 2015-10-22T10:00:25.580 回答
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 回答