10

我在SO中找到了一篇文章,讨论了防止从实例方法写入静态字段所需的代码更改,但为什么这样做不是一个好习惯?那么为什么 Java 设计者允许这样做呢?换句话说,为什么当有人尝试这样做时编译器不会抛出错误?

4

3 回答 3

12

用“findbugz”文档的话来说:

此实例方法写入静态字段。如果正在操纵多个实例,这很难纠正,而且通常是不好的做法。

也就是说,它并不总是错误的,只是它通常是错误的来源。操作静态字段的实例对象对于例如共享对象的延迟初始化可能很有用,因此它并不总是错误的,但很难做到正确(特别是如果多个线程可能同时运行)。

于 2012-07-04T08:21:40.347 回答
0

它可能很有用,例如,如果您有一个管理蚂蚁的应用程序,并且您需要能够从 ant 类中访问创建的蚂蚁总数。这可以通过写入一个静态方法来完成,该方法在每次创建新蚂蚁时跟踪蚂蚁总数写入静态方法 addAnt();

于 2012-07-04T08:40:02.210 回答
0

除了上述之外,从文档的角度来看,如果您使用以下形式,人们很容易假设它是一个实例字段:

someField = null

或者

myObj.someField = null

使用表格

myClass.someField = null

使它更清晰并防止 findbugz 警告(显然,我没有测试过)。请注意,这不会阻止所描述的多线程问题。

于 2012-07-04T08:33:50.187 回答