java - 使可变变量可跨许多其他未连接的对象访问

标签 java static

在 Java 中,我如何才能使一个可变对象可以跨许多其他未连接的对象访问,而无需 A) 创建可变静态字段/方法或 B) 将同一对象向下传递多个层,或者哪一个被认为是最佳实践可维护性、可读性等?

我在桌面应用程序中经常遇到的两个案例:

GUI 中的用户/ session 数据。用户在应用程序开始时登录,稍后我将需要在 JFrame 内的另一个面板内的另一个面板内的 JPanel 内的 JLabel 中的用户名。将我的 session 数据传递到五六层深的构造函数中似乎很荒谬,但我讨厌将此信息保存在静态变量中的对象被到处访问的想法。

数据库访问。我有一个对象来访问数据库,然后所有种类的对象都需要访问数据库。这些类基本上是不相关的,并且出于不同的原因需要数据库,所以我求助于 Databases.thisOne().query("...")

最佳答案

这个问题肯定是一个客观的问题,这可能会引发语言/框架功能 war 的争论。

关于实际问题,您在此处指出的情况是有效的,该问题的对应部分仅使用静态数据 回答。您不能简单地拒绝静态是这里唯一的方法这一事实。他们是故意的。

Understanding Class members

Sometimes, you want to have variables that are common to all objects. This is accomplished with the static modifier. Fields that have the static modifier in their declaration are called static fields or class variables. They are associated with the class, rather than with any object. Every instance of the class shares a class variable, which is in one fixed location in memory. Any object can change the value of a class variable, but class variables can also be manipulated without creating an instance of the class.

让我举一个你提到的例子。即 session 。您是否浏览过容器中 session 管理的源代码?所有属性和值都存储在服务器上的 static Hashmap 中,以便它们可以跨实例(请求、请求上下文等)进行访问。

关于java - 使可变变量可跨许多其他未连接的对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32282154/

相关文章:

java - AWS Lambda 在图层中找不到共享对象文件

java - Android TodoApp 与 ListView - 列表不显示

java - 如何在javafx webkit中添加文件为://. ..的本地img

c - 如何结合目标文件(.o)为iOS创建静态库(.a)?

java - 将项目添加到资源文件

php - 过程函数与静态方法。哪个更好或者两者都避免?

c++ - 将私有(private)库静态链接到公共(public)库以隐藏符号

java - 无法对非静态方法进行静态引用 (Java)

python - 带有夹层和模板的 django 静态 url

java - 使用 post 方法将数据从 jsp 登录表单发送到 servlet 时出现空白页面