Как я могу вызвать нестатический метод из другого класса в Java? - PullRequest
0 голосов
/ 03 августа 2010

Хорошо, это немного грязно:

Я использую Netbeans, и у меня есть основной класс, называемый ParameterUI.(Это графический интерфейс). Этот класс имеет несколько ползунков на своем графическом интерфейсе, и, поскольку они являются частными, у меня есть метод getBounds ().Я не хочу загромождать мой графический интерфейс, и поэтому все важные методы для вычисления вещей находятся в другом классе, называемом Structure.Поэтому ParameterUI вызывает метод в Structure, который вызывает еще несколько методов внутри себя, и один из этих вызовов вызывает getBounds.

Проблема в том, что getBounds не может быть статическим, но я не могу вызвать его, если't.

В ParameterUI.class:

public int[] getBounds () {
    int[] bounds = new int[2];
    bounds[0] = jSlider2.getMinimum();
    bounds[1] = jSlider2.getMaximum();
    return bounds;
}

В Structure.class:

private static void myMethod (Graphics g, double[] planet, long mass) {
    int[] bounds = ParameterUI.getBounds(); //<-- doesn't work
}

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

Редактировать: По сути, я знаю, в чем проблема, иЯ ищу лучший способ решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 03 августа 2010

Статический и Нестатический

Статический означает, что вы можете получить доступ к методу (ам) без создания экземпляра объекта этого класса.

Нестатический означает, что вы можете получить доступ к методу (ам) только из экземпляра этого класса.

Что вам нужно сделать, это выяснить, хотите ли вы, чтобы методы в классе ParameterUI были статическими или нет.

Если вы измените значение get get на Static, оно будет работать.

public static int[] getBounds () {
   int[] bounds = new int[2];
   bounds[0] = jSlider2.getMinimum();
   bounds[1] = jSlider2.getMaximum();
   return bounds;
}

Возможно, вы захотите сначала подумать об этом.

2 голосов
/ 03 августа 2010

Передать экземпляр ParameterUI статическому методу

private static void myMethod (ParameterUI param, Graphics g, double[] planet, long mass) {
    int[] bounds = param.getBounds(); //<-- doesn't work
}

Однако вы можете пересмотреть проект, в котором вы вызываете статические методы других классов, чтобы вычислить вещи о первом классе. Это говорит о том, что вся логика, необходимая для вашего класса пользовательского интерфейса, не содержится в нем, а открытые статические методы приводят к трудностям при тестировании кода.

1 голос
/ 03 августа 2010

Основы: вы не можете получить доступ к нестатическим членам из статического метода.

Вам нужно будет создать экземпляр или передать экземпляр ParameterUI статическому методу / в

...