Вызовите метод без аргументов в Java - PullRequest
0 голосов
/ 22 августа 2011

У меня есть такой код:

import com.eteks.sweethome3d.SweetHome3D;
import com.eteks.sweethome3d.model.Home;

public class Test extends SweetHome3D {
  public static void main(String [] args) {
    new Test().init(args);
  }

  @Override
  public Home createHome() {
    Home home = super.createHome();
    // Modify home as you wish here
    return home;
  }
}

и я хочу запустить свой метод через main. Ты знаешь, как я могу это сделать? Я пробовал много способов, как:

createHome();

super.createHome();

Но он не распознает этот тип. Я тоже пробовал

Test test = new Test();
  test.init(args);
  test.createHome();

, который не создает никакой ошибки, но все же, то, что я хочу, не сделано. И они посоветовали мне: «Вы не должны вызывать test.createHome (); напрямую»

Заранее спасибо:)


Дело в том, что теперь оно запускает мое приложение, но когда я ставлю это

System.out.println("method called");

в мой метод, он отображается дважды ... ??? Почему?

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Проблема заключается в разнице между статическими методами и методами экземпляра.createHome - это метод экземпляра, который означает, что для вызова этого метода у вас должен быть экземпляр этого класса.Вот почему вы можете вызывать createHome () из вашей тестовой переменной, потому что test является экземпляром Test.Основной метод - это статический метод, он связан с Class Test, и у него нет экземпляра Test для вызова этого метода.Класс - это часть памяти, отличная от экземпляров, созданных из этого класса.Тем не менее, класс может иметь методы и переменные, связанные с ним с помощью ключевого слова static.

Теперь, почему он не работает, вероятно, больше связано с вашим кодом и предположениями о том, когда этот метод может бытьназывается.Я полагаю, что метод init () выполняет довольно большие операции и не готов обрабатывать вызовы createHome (), поскольку система еще не полностью запущена.Похоже на программу пользовательского интерфейса, поэтому могут быть некоторые проблемы с синхронизацией и обработкой событий.

Трудно понять, почему она не работает для вас без конкретных ошибок.

1 голос
/ 22 августа 2011

Нет проблем с вызовом test.createHome(), и так оно и должно работать.

Чтобы проверить, вызывается ли метод, вы можете поместить System.out.println("method called) в метод createHome().

Возможно, ваша проблема лежит где-то еще, возможно, в суперклассе.

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