为什么Netbeans“初始化提示”表示对zapOperatorBooleans()的调用是对构造函数的有问题调用?

时间:2013-10-24 00:08:12

标签: java netbeans

如果我在“public GUI()”之前插入以下内容,警告会消失,但是什么事情发生了?

  @SuppressWarnings("OverridableMethodCallInConstructor")

我真的应该做什么?为什么?

public class GUI extends javax.swing.JFrame {

  boolean plusActive;
  boolean minusActive;
  boolean timesActive;
  boolean divActive;
  boolean toTheActive;

  public GUI() {
    initComponents();
    zapOperatorBooleans();
  }

  public void zapOperatorBooleans(){
    plusActive = false;
    minusActive = false;
    timesActive = false;
    divActive = false;
    toTheActive = false;
  }
  ...

我刚刚阅读(在工具>选项>提示中)“调用可以覆盖的方法在构造函数中可能是危险的,因为在调用重写方法时,对象未完全初始化”但是没有帮我决定我该做什么。

2 个答案:

答案 0 :(得分:1)

zapOperatorBooleans声明为finalprivate。至于原因,请参阅http://www.javapractices.com/topic/TopicAction.do?Id=215

答案 1 :(得分:0)

所有评论都有帮助。这是修改后的代码。我之前只拥有我以前拥有的东西,因为GUIbuilder用它的initComponents()方法诱惑了我,我抓住了机会并从窗台上掉了下来。

class...
      private static boolean plusActive = false;
      private static boolean minusActive = false;

  public GUI() {
    initComponents();
  }

  private void zapOperatorBooleans(){
    plusActive = false;
    minusActive = false;

等。
(不冗余;在迭代执行GUI期间,一个或多个布尔值设置为true,需要重置,但它们也需要初始值。)

所以这就是我真正应该做的。

更重要的是(从我的角度来看),我对这样一个基本概念和其他概念的无知(例如,我对错误消息“非静态......可能无法从非静态上下文中引用”的无能回应)我做了很多阅读,反映(个人,而不是Java),谷歌搜索,学习,思考...我比我好得多。