当前位置: 首页 > 面试题库 >

解决此“从实例方法写入静态字段” findbugs警告的最佳方法是什么?

韦星文
2023-03-14
问题内容

我有一个与此相似的类,并且findbugz抱怨“从实例方法写入静态字段”(initialize()killStaticfield())。我无法在ctor中设置静态字段。

  • 解决此问题的最佳方法是什么?
  • 将staticField放在AtomicReference中就足够了吗?
         public class Something
     {
      private static SomeClass staticField = null;
      private AnotherClass aClass;
      public Something()
      {

      }

      public void initialize()
      {
        //must be ctor'd in initialize
        aClass = new AnotherClass();
        staticField = new SomeClass( aClass );
      }

      public void killStaticField()
      {
       staticField = null;
      }

      public static void getStaticField()
      {
        return staticField;
      }
    }

问题答案:

尽可能保持与原始设计的距离…

public class Something {
  private static volatile SomeClass staticField = null;

  public Something() {
  }

  public static SomeClass getStaticField() {
    if(Something.staticField == null)
      Something.staticField = new SomeClass();;
    return Something.staticField;
  }
}

通过类名称引用您的静态变量,这将删除findbugz警告。将您的静态变量标记为volatile,这将使引用在多线程环境中更安全。

更好的是:

public class Something {
  private static final SomeClass staticField = new SomeClass();

  public Something() {
  }

  public static SomeClass getStaticField() {
    return Something.staticField;
  }
}


 类似资料:
  • 问题内容: 我从Sonar收到此提示: 实例方法不应写入“静态”字段 我不确定要解决此问题需要更改什么。 “ SemaMonitorProxy.applicationContext”是否必须等于静态方法? 问题答案: 实际上这种方法: 是写入静态字段的实例方法: 您不能将上述方法设为静态。因此,唯一的解决方案是从声明中删除static关键字。

  • 问题内容: 如果我用Java创建类的实例,为什么最好静态地调用同一类的静态方法,而不是使用this.method()? 当我尝试通过this.staticMethod()从自定义类的构造函数中调用静态方法staticMethod()时,我收到Eclipse的警告。 与 谁能解释为什么这是一件坏事?在我看来,编译器应该已经分配了对象的实例,因此静态分配内存将是不必要的开销。 编辑: 我听到的要点是,

  • 当我使应用程序使用许多库时。我通常遇到的错误是 此错误有一些原因,因为: 数函数 关于第二种情况,很难检测嵌套了什么库。 如果你对这个问题有经验,请分享给我。 更新:

  • 我在www.westerford.co.za上的所有页面都有错误。这些错误导致内容被隐藏。 请到站点查看所有错误。可能是什么引起的? 谢谢

  • 编译器在第3行给出了一个错误 此实例方法无法重写Abc中的静态方法 为什么静态方法不能被实例方法覆盖?

  • 问题内容: 这是更新mysql SET字段,从字段中删除特定值的最佳方法。 例如。值分别为1,2,3,4,5的字段类别?我想从列表中删除“ 2”: 但是,如果“ 2”是列表中的第一个或最后一个值,该怎么办? 我如何用一个查询处理所有3种情况? 问题答案: 如果您需要从集合中删除的值不能多次出现,则可以使用以下方法: 看到它在这里工作。如果该值可以多次出现,则将删除所有出现的值: