【问题标题】:Alternatives to invoking instance method on static variable/method?在静态变量/方法上调用实例方法的替代方法?
【发布时间】:2020-10-18 09:16:57
【问题描述】:

我读到在静态变量/方法上调用实例方法被认为是不好的做法(我不知道确切原因,但无论如何这不是问题)。

例如:

class Dice
{
    private int value;
    private static Random randomizer=new Random(); 
    
    public int setAndget_DiceValue()
    {
        value=randomizer.nextInt(6)+1; //Accessing static variable via instance class. Any alternatives?
        return value;
    }
}

那么,修改不涉及调用实例方法的静态变量的替代方法是什么? 即使我在 randomizer 上使用了静态方法,我也必须在静态方法上使用该实例方法,这仍然被认为是不好的做法。

编辑: 我第一次看到这被认为是一种不好的做法的一些地方:

1)Writing to a static variable in an instance method, why is this a bad practice?

2 ) 对 OP 帖子的评论:Can non-static methods modify static variables。他是一个高声望的用户,所以我倾向于相信他。

3)

【问题讨论】:

  • 你在哪里读到这是不好的做法?它不是。你要么误解了它,要么断章取义。
  • 分享您获取此信息的链接
  • 这段代码没有问题,但是如果你的程序是多线程的,你应该注意Random的javadoc中的这个注释:java.util.Random的实例是线程安全的。但是,跨线程并发使用相同的java.util.Random 实例可能会遇到争用,从而导致性能下降。考虑改为在多线程设计中使用ThreadLocalRandom
  • @Andreas,对不起,我是初学者,还没有接触到多线程
  • 1) 不适用,因为您没有写入静态变量。 2) 不适用,因为您没有修改静态变量。 3) 不适用,因为您没有返回静态变量的值。

标签: java methods static instance


【解决方案1】:

通常静态变量会伴随着final,因此一旦初始化它们就不能在类内重新分配不同的值。

唯一无效的上下文是试图直接使用实例级变量或方法的静态方法,但我不认为反过来是无效的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    相关资源
    最近更新 更多