调用实例方法而不指定实例名称

时间:2014-11-19 19:20:26

标签: java class methods parameters

我有两个课程 - ChatroomUser

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()当前的聊天室,而无需指定它。

1 个答案:

答案 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;
        }
    }
....
}