我在SO中找到了一篇文章,讨论了防止从实例方法写入静态字段所需的代码更改,但为什么这样做不是一个好习惯呢?为什么Java设计者会允许这样做?换句话说,为什么编译器在尝试执行此操作时不会抛出错误?
答案 0 :(得分:12)
用'findbugz'文件的话来说:
此实例方法写入静态字段。如果正在操纵多个实例,这很难得到正确的解决方法。
这也就是说它并不总是错误的,只是它通常是错误的来源。操作静态字段的实例对象可用于例如共享对象的延迟初始化,因此它并不总是错误的,但它很难正确(特别是如果多个线程可能同时运行)。
答案 1 :(得分:0)
除了上述内容之外,从文档的角度来看,如果您使用表单,则很容易让某人认为它是一个实例字段:
someField = null
或
myObj.someField = null
使用表格
myClass.someField = null
使它更清晰并阻止findbugz警告(显然,我还没有测试过)。请注意,这不会阻止所描述的多线程问题。
答案 2 :(得分:0)
它可能很有用,例如,如果你有一个管理蚂蚁的应用程序,你需要能够访问ant类中创建的蚂蚁总数。 这可以通过写入静态方法来完成,该方法在每次创建新的ant时都会跟踪蚂蚁的总数写入静态方法addAnt();