可以有多个静态变量实例吗?

6

静态变量只有一个实例(也就是它们属于类)。 例如:Math.pi

是否有任何方法可以有多个静态变量的实例? 我听说与类加载器有关?

1个回答

15

如果您发现需要多个静态变量的实例,这强烈表明您首先不应该使用静态变量。

是的,如果同一类在不同的类加载器中加载,那么每个类的副本将具有自己的静态变量。但是,只有由相同类加载器加载的类才能在静态地引用这些静态变量。当然,那些代码只会在一个类的静态变量中看到静态变量。所以您可能没有实现很多东西。

与其搞乱类加载器,您应该重构代码,将静态变量转换为实例变量。


7
@satish - 那么我还没能说服你这是个不好的主意吗? - Stephen C
1
重点不在于坏主意,而在于尝试理解多类加载器背后的思想。如果您遇到任何教程或示例,请指引我。感谢您提供如此好的答案 :-) - Satish
3
有时候我们需要使用一个库,但是它的类会在静态区域上吐出来,这样就不可能获得多个稳定的实例。如果我被迫使用这样的库,自定义的ClassLoader只是一个更长的棍子。(: - Txangel
我认为从长远来看,如果你集中精力修复那个糟糕的库,你(和其他人)会受益更多。修复它或替换它。 - Stephen C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接