Почему я не могу вызвать эту функцию в Java? - PullRequest
1 голос
/ 16 февраля 2010
import static com.example.hello.Tools.*;
public class MAINCLASS{
   public void run(){
      runtools(); // this works
   }
   private class People{
      public void runpeople(){
          runtools(); // this does not work.
      }
   } 
}

Внутренние инструменты ...

Редактировать: когда я переворачиваю runtools () в People.runpeople () ... я получаю это:

Метод runtools () не определен для типа MAINCLASS.People

public class Tools {
    public void runtools() {
     ....
    }
}

Кто-нибудь знает почему?

Ответы [ 5 ]

7 голосов
/ 16 февраля 2010

Вам нужно объявить Tools#runtools() static, чтобы иметь возможность import static it.

public class Tools {
    public static void runtools() {
        // ...
    }
}

Либо так, либо создайте экземпляр Tools и затем вызовите runtools().

new Tools().runtools();
1 голос
/ 16 февраля 2010

Это не компилируется. Вы не можете импортировать пакет, используя ключевое слово static. Импорт должен быть определенным методом.

Так что вам нужно написать что-то вроде этого, чтобы оно скомпилировалось и работало:

import static com.example.hello.Tools.someMethod;

Кроме того, импортируемый метод должен быть статическим.

Это заставляет вас вызывать статический метод, как он был объявлен в области видимости этого класса:

someMethod();
1 голос
/ 16 февраля 2010

Этот код не должен работать (вообще), как вы его опубликовали, потому что вы импортируете только статические элементы Tools, а runtools () является методом экземпляра. Если вы должны сделать runtools () статическим, тогда оба вызова runtools () должны работать, потому что в обоих случаях он находится в области действия.

1 голос
/ 16 февраля 2010

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

1 голос
/ 16 февраля 2010

В связи с другим вопросом, который вы недавно задали, касающимся этого же класса и его проблем: Почему я не могу поместить свои функции в другой класс?

Устраняет ли эта проблема предложение от cletus об удалении «static» из вызова import? «Статический» бит все еще там.

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