2014-09-26 2 views
-1
public class Agent { 
     private Space _location; 
     private String _name; 
     public void setLocation(Space space){ 
      _location = space; 
     } 
     public void usePortal(){ 
      if(_location.getPortal() != null){ 
      Portal.transport(Agent.this); 
      } 
     } 
    } 

java.lang.Error: Нерешенные проблемы компиляции: Невозможно сделать статическую ссылку на нестатической метод транспорта (Агент) от типа порталаКак я могу вызвать метод в экземпляре класса экземпляра?

выше ошибка это дает мне. У меня есть открытый класс Space с переменной-членом типа Portal и getPortal() getter. который выглядит следующим образом:

public class Space { 
     private String _name; 
     private String _description; 
     private Portal _portal; 
     public Portal getPortal(){ 
      return _portal; 
     } 
    } 

В моем общественном классе Portal, у меня есть метод транспортировки с параметром Агент:

public class Portal { 
     private String _name; 
     private String _direction; 
     private Space _destination; 
     public Space getDestination(){ 
      return _destination; 
     } 
     public void transport(Agent str){ 
      str.setLocation(getDestination()); 
     } 
    } 

Моя главная проблема, имеющий метод usePortal(), чтобы работать, пространство и Классы портала полностью функциональны. Я не знаю, как бы я назвал метод экземпляром агента в классе Агента.

+0

Я не понимаю ваше название. Вы вызываете метод экземпляра 'transport' из класса экземпляра' Агент'. Просто создайте экземпляр «Portal», а затем вызовите 'portalInstance.transport (this);'? –

+0

Изучите 'static & this keyword' first !! –

ответ

1

java.lang.Error: Unresolved compilation problem: Cannot make a static reference to the non-static method transport(Agent) from the type Portal

Это потому, что метод транспортировки является instance способ и не static.

Либо создать экземпляр Portal, а затем использовать это или сделать метод transport статический

Portal portal = new Portal(); 
portal.transport(this); 

или

public static void transport (Agent str) 

I don't know how I would call the method on an instance of Agent within the Agent class.

Вместо Agent.this использовать только this

+0

Хорошее предположение пропустить использование статического метода !! –

+0

@WundwinBorn добавил проблему использования статического метода, а также –

+0

Хорошее объяснение и +1 обратно !! В любом случае, вы должны отправить код вместе с! –

1

Вы можете не звонить другим класам s без инициализации ссылки на объект. Если это не объявлено статическим.

Например:

Portal portal = new Portal(); 
portal.transport(this); 

Обратите внимание, что this представляет собой ссылку на текущий объект, в данном случае, агент.

Проведите еще несколько исследований в Интернете, чтобы узнать, как работают объекты java, а также исследовать статические и нестатические контексты. Тонны примеров!

+0

Вы также должны объяснить это ключевое слово! –

+0

Отредактировано, хороший звонок. – proulxs

0

это должно работать

public void usePortal(){ 
    if(_location.getPortal() != null){ 
    _location.getPortal().transport(this); 
    } 
} 
Смежные вопросы