2014-11-19 2 views
0

У меня есть два класса - Chatroom и User.Вызов метода экземпляра без указания имени экземпляра

Chatroom имеет функцию, чтобы удалить указанного пользователя из списка массивов Chatroom.

public void removeUser(User u) 
{ 
    if(userlist.contains(u)){ 
     userlist.remove(u); 
    } 
} 

А в классе User есть метод, называемый leaveRoom. Этот метод пересылает параметр User в метод removeUser экземпляра Chatroom.

public void leaveRoom(final Chatroom name) 
{ 
    name.removeUser(this); 
} 

Однако он требует для имени экземпляра класса Chatroom быть дано функции в качестве параметра. Работа с blueJ Я должен поместить этот тип в окно при вызове метода из экземпляра User.

Теперь мне было интересно, есть ли способ вызвать правильный метод в правильном экземпляре Chatroom БЕЗ указания указать имя экземпляра в качестве параметра?

РЕДАКТИРОВАТЬ:

Пользователь может находиться только в одном чате одновременно. Цель состоит в том, чтобы leaveRoom() в текущем чате, не указывая его.

+0

Я не уверен, что речь идет. То, как вещи определены, нужно передать 'Chatroom' методу' leaveRoom'. Другой вариант - передать 'User' методу' removeUser' 'Chatroom'. –

+0

Ну, вопрос будет состоять в том, как передать текущий Chatroom пользователь в метод leaveRoom, если это возможно. –

ответ

1

Если экземпляр User имеет только один Chatroom они могут быть, вы могли бы сохранить ссылку на этот Chatroom в User классе, и тогда вы не должны предоставлять любой параметр leaveRoom.

Однако, если User может быть одновременно в нескольких Chatroom s, то необходимо указать способ, из которого выходить, leaveRoom, поэтому параметр необходим.

Если User может быть только в одной комнате, в то время, код может выглядеть следующим образом:

public class User { 

... 
    private ChatRoom currentRoom; 
... 
    public void leaveRoom() 
    { 
     if (currentRoom != null) { 
      currentRoom.removeUser(this); 
      currentRoom = null; 
     } 
    } 
.... 
} 
+0

Пользователь может находиться только в одном чате за раз. Цель состоит в том, чтобы оставить Room() в текущем чате без необходимости его указывать. –

+0

@RomanRutkowski В этом случае см. Мое редактирование – Eran

+0

Я пробовал. (Чат не написан ChatRoom btw) Это не работает. Пользователь по-прежнему находится в чате после использования функции leaveRoom(). –

Смежные вопросы