【问题标题】:Static token generation?静态令牌生成?
【发布时间】:2016-01-21 13:29:07
【问题描述】:

我发现了这个问题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);
    }
}

而我的问题是我可以发nextSessionIdstatic吗?

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

【问题讨论】:

  • 您还必须将 random 设为静态
  • @Jonk 是的,但我认为这没有问题。不好吗?
  • 不,只是观察

标签: java static secure-random


【解决方案1】:

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

正如 cmets 中提到的 JonK 一样,random 字段也必须设为静态。 因为SecureRandom is thread-safe,这也不是问题。

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

【讨论】:

    【解决方案2】:

    是的,如果您愿意,您可以将其设为static。但是你为什么要呢?

    您可能想阅读以下内容,然后重新考虑制作东西static

    1. Why are static variables considered evil?
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 2010-12-20
      • 2021-07-29
      • 2011-02-22
      • 2021-08-22
      相关资源
      最近更新 更多