我有两个课程 - 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 :(得分:1)
如果User
实例只有一个Chatroom
,则可以在Chatroom
课程中保留对User
的引用,然后你就不会# 39; t必须向leaveRoom
提供任何参数。
但是,如果User
可以同时位于多个Chatroom
中,则必须告知leaveRoom
方法要离开哪个房间,因此该参数是必要的。
如果User
一次只能在一个房间,代码可能如下所示:
public class User {
...
private ChatRoom currentRoom;
...
public void leaveRoom()
{
if (currentRoom != null) {
currentRoom.removeUser(this);
currentRoom = null;
}
}
....
}