Проблема понимания того, как вызывается нестатический метод - PullRequest
0 голосов
/ 30 мая 2011

Я читаю Java-код libreoffice, и есть одна вещь, которую я не совсем понимаю. Метод updateUI () вызывает 2 раза метод updateUI , и они передают в качестве параметра переменную Vector, НО этот метод не принимает никаких параметров. Кто-нибудь может объяснить мне, что делает этот параметр? если updateUI () вызывается так:

UnoDataAware.updateUI(); 

жалуется и говорит:

Нестатический метод не может быть вызван из статического контекста

Ответы [ 6 ]

1 голос
/ 30 мая 2011

Когда вы вызываете статическую версию этого метода, вы не используете его в контексте экземпляра объекта.По этой причине вам нужно передать параметр статическому методу, чтобы он знал, для каких объектов обновлять пользовательский интерфейс.

Этот параметр позволит статическому методу updateUI выполнять итерацию по коллекции объектов DataAware.и вызовите их updateUI метод из нестатического контекста.Это означает, что без параметра updateUI не требуется ссылка на объект, поскольку он принадлежит объекту.

1 голос
/ 30 мая 2011

Я бы сказал, что вещь с перекрестными ссылками - это плохо. Вот метод, который вы ищете:

DataAware.updateUI(Collection dataAwares)

1 голос
/ 30 мая 2011

Во второй предоставленной вами ссылке есть другой метод: (строка 203)

 public static void updateUI(Collection dataAwares) {
            for (Iterator i = dataAwares.iterator(); i.hasNext();)
                ((DataAware) i.next()).updateUI();
         }

Это метод, который вызывается 2 раза. Статический означает, что вы должны указать имя класса, прежде чем вы можете его вызвать. Если вы не принадлежите к этому классу.

Users.getFirstName () (пример)

0 голосов
/ 30 мая 2011

Эта функция называется:

public static void updateUI(Collection dataAwares)

не

public void updateUI()

0 голосов
/ 30 мая 2011

Вы смотрите не на ту строку.

Посмотрите на строку 203 , это вызываемый метод.

0 голосов
/ 30 мая 2011

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

И из того же источника:

         /**
199      * given a collection containing DataAware objects,
200      * calls updateUI() on each memebr of the collection.
201      * @param dataAwares a collection containing DataAware

объектов.202 * /

...