как это статическая ссылка? - PullRequest
1 голос
/ 28 августа 2009
package gui;


public class Solver {


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

}

Я пытаюсь получить доступ к методу moveThat из этого класса, но он постоянно говорит мне, что я не могу получить доступ к нестатическому методу moveThat из статической ссылки. Я не вижу, как это статическая ссылка?

Ответы [ 4 ]

6 голосов
/ 28 августа 2009

Как определяется CubeGui? Правописание предполагает, что это имя класса, и в этом случае moveThat должно быть static для доступа, поскольку вы не создали экземпляр из CubeGui.

4 голосов
/ 28 августа 2009

Чтобы расширить один из моих комментариев, оставленных на Конрад Рудольф ответ ...

Я предполагаю, что объявление класса 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 выглядела так:

<code>public class Solver {
   private void solveIt() {
      new CubeGui().moveThat();
   }
}
3 голосов
/ 28 августа 2009

moveTэто метод экземпляра.

  public class Solver {
        void solveIt(){
            new CubeGui().moveThat();    
        }
    }
0 голосов
/ 28 августа 2009

Из ваших комментариев кажется, что CubeGui - это колебательный фрейм, который вы открываете только один раз, и вы хотите получить ссылку на этот фрейм для вызова метода moveThat. Лучший способ - передать ссылку на ваш класс решателя:

открытый класс Солвер {

private CubeGui gui;

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

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

}

Если на практике это действительно сложно, вы можете подумать о том, чтобы сделать CubeGui синглтоном (если это не оправдано, иногда это имеет смысл, например, в этом случае, когда у вас отображается не один кадр). Для этого вы делаете конструктор CubeGui закрытым, а затем добавляете метод в CubeGui следующим образом:

 private static CubeGui singleInstance;

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

Тогда в вашем решателе вы можете сделать:

  CubeGui.getInstance().moveThat();

Я, вероятно, получу понижательную оценку за предложение Синглтона. Я мог бы даже заслужить это, но похоже, что вопрос должен знать, как это выглядит. Чтобы противостоять этому, см. здесь .

Так что, если это вообще возможно, передайте объект в качестве параметра либо в конструктор, либо в метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...