java - 在java的静态上下文中是否有任何替代方法

标签 java static this

我有一个类,其方法称为 sThread()。 想重构mClass的sThread()方法的代码。

class SClass {
     private Thread sThread;

     public void sSubThread() {

          initalize_sThread();

          //some code

          if (this.sThread != null) {
              return;
          }
     }
 }

所以我做了如下更改 使用静态方法创建了另一个名为 SubscritpionThread 的实用程序类。

class mClass {
    // some code

    public void sThread() {
        SThread.sThreadStart();       
    }
}

class SThread {

    private static Thread sThread;

    private static void initalize_sThread() {
        //  some code
    }

    public static void sThreadStart() {
        // some code
        // changed this to classname
        if (SThread.sThread != null) {
             return;
        }
    }
}

这是正确的做法吗,有什么建议吗?

最佳答案

静态字段(除非它们是最终字段)非常不受欢迎,因此您应谨慎使用它们。

您的类mClass具有实例字段和方法,然后您决定将线程上的一些操作分解为实用程序类。

您的实用程序类应该是无状态的,并且不依赖于静态字段,如果您需要一个全局变量,轻量级解决方案是创建一个单例,并在那里托管您的全局变量。

使用单例也令人皱眉(但不如随机静态字段),下一步是依赖注入(inject)框架,如 guice、weld、spring(你能想到的)。

底线是:尝试保持数据范围,如果您需要全局字段,请将其视为应用程序范围中的范围字段。

关于java - 在java的静态上下文中是否有任何替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42759574/

相关文章:

Java客户端服务器,多线程

java - 通过静态字段创建实例

java - 放入静态 map 时的非静态变量 this

c# - C# 中的静态构造函数

c# - 'this' 在 C# 构造函数中意味着什么?

java - Android安装过程中实时获取权限

java - 安装 jre 7 后如何设置 Jre 6 的路径?

java - Android布局触摸问题

javascript - $(this) 在 .append() 中不起作用

javascript - 如何正确选择一个 div 呢?