在Java中,我怎样才能使多个未连接的对象可以访问可变对象,而无需A)创建可变的静态字段/方法或B)将同一个对象传递到多个层,或者哪些被认为是最佳实践可维护性,可读性等?
桌面应用程序中经常出现两种情况:
GUI中的用户/会话数据。用户在应用程序启动时登录,稍后我将需要JFabel内的另一个面板内另一个面板内的JPanel内的JLabel中的用户名。将我的会话数据传递给五层或六层深的构造函数似乎很荒谬,但我讨厌一个对象,它将这些信息保存在整个地方都可以访问的静态变量中。
数据库访问。我有一个对象来访问数据库,然后需要访问数据库的各种对象。这些类基本上是不相关的,并且由于不同的原因需要数据库,所以我求助于Databases.thisOne().query("...")
。
答案 0 :(得分:3)
这个问题肯定是一个客观问题,这可能引发对语言/框架特征战争的争论。
根据实际问题,您指向此处的案例有效,而该问题的反对部分仅以static data
回答。你不能简单地拒绝静态是这里唯一的方式。它们就是为了它。
有时,您希望拥有所有对象共有的变量。这是通过静态修改器完成的。在声明中具有static修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。
让我举一个你提到的例子。那是session
。您是否曾在容器中查看会话管理的源代码?所有属性和值都存储在服务器上的static Hashmap
中,以便跨实例(请求,请求上下文等)进行访问。