【发布时间】: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。他是一个高声望的用户,所以我倾向于相信他。
【问题讨论】:
-
你在哪里读到这是不好的做法?它不是。你要么误解了它,要么断章取义。
-
分享您获取此信息的链接
-
这段代码没有问题,但是如果你的程序是多线程的,你应该注意
Random的javadoc中的这个注释:java.util.Random的实例是线程安全的。但是,跨线程并发使用相同的java.util.Random实例可能会遇到争用,从而导致性能下降。考虑改为在多线程设计中使用ThreadLocalRandom。 -
@Andreas,对不起,我是初学者,还没有接触到多线程
-
1) 不适用,因为您没有写入静态变量。 2) 不适用,因为您没有修改静态变量。 3) 不适用,因为您没有返回静态变量的值。
标签: java methods static instance