这是一个静态参考?

时间:2009-08-28 13:36:38

标签: java static

package gui;


public class Solver {


    void solveIt(){
        CubeGui.moveThat();
    }    

}

我正在尝试从此类访问方法moveThat,但它一直告诉我无法从静态引用访问非静态方法moveThat。我不知道这是一个静态参考?

4 个答案:

答案 0 :(得分:6)

CubeGui如何定义?拼写表明它是一个类名,在这种情况下,moveThat必须被static访问,因为您没有创建CubeGui实例

答案 1 :(得分:4)

要扩展我在Konrad Rudolph的回答中留下的一条评论......

我的猜测是你的CubeGui类声明看起来像这样:

public class CubeGui extends javax.swing.JFrame {
   public void moveThat() {
      // do stuff
   }
}

它应该如下所示(注意moveThat方法上的静态引用):

public class CubeGui extends javax.swing.JFrame {
   public static void moveThat() {
      // do stuff
   }
}

或者您需要Solver的实现看起来像这样:

public class Solver {
   private void solveIt() {
      new CubeGui().moveThat();
   }
}

答案 2 :(得分:3)

moveThat是一个实例方法。

  public class Solver {
        void solveIt(){
            new CubeGui().moveThat();    
        }
    }

答案 3 :(得分:0)

从您的评论中可以看出,CubeGui是一个只打开一次的摇摆框架,并且您希望获得对该框架的引用以调用moveThat方法。最好的方法是将引用传递给求解器类:

public class Solver {

private CubeGui gui;

public Solver(CubeGui gui) {
     this.gui = gui;
}

void solveIt(){
    gui.moveThat();
}    

}

如果在实践中确实很难,你可以考虑让CubeGui成为一个单身人士(尽管这是不正确的,有时它是有道理的,因为在这种情况下你没有多个框架显示)。为此,您将CubeGui的构造函数设为private,然后将方法添加到CubeGui,如下所示:

 private static CubeGui singleInstance;

 public static CubeGui getInstance() {
     if (singleInstance == null) {
         singleInstance = new CubeGui();
     }
     return singleInstance;
 }

然后在你的解算器中你可以做到:

  CubeGui.getInstance().moveThat();

我可能会因为建议单身人士而得到一个推特。我甚至应该得到它,但听起来这个问题需要知道它看起来像什么。为了抵消这一点,请参阅here

因此,如果可能的话,将对象作为参数传递给构造函数或方法。