【问题标题】:Calling instance method without specifying instance name调用实例方法而不指定实例名称
【发布时间】:2015-01-17 11:07:36
【问题描述】:

我有两个类 - ChatroomUser

Chatroom 具有从Chatrooms 数组列表中删除指定用户的功能。

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

User 类中有一个名为leaveRoom 的方法。该方法将User参数转发给Chatroom实例的removeUser方法。

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

但是,它需要将Chatroom 类的实例名称作为参数提供给函数。使用 blueJ 从User 的实例调用方法时,我必须在窗口中输入这个。

现在我一直想知道是否有一种方法可以在Chatroom 的正确实例中调用正确的方法而不必将实例名称指定为参数?

编辑:

用户一次只能在一个聊天室中。目标是 leaveRoom() 当前聊天室,而无需指定它。

【问题讨论】:

  • 我不确定问题是什么。定义事物的方式必须将Chatroom 传递给leaveRoom 方法。您的另一个选择是将User 传递给ChatroomremoveUser 方法。
  • 那么问题是如果可能的话,如何将用户所在的当前聊天室传递给 leaveRoom 方法。

标签: java class methods parameters


【解决方案1】:

如果User 实例只有一个Chatroom 可以在其中,您可以在User 类中保留对该Chatroom 的引用,然后您不必向@ 提供任何参数987654325@.

但是,如果一个User可以同时在多个Chatrooms中,则必须告诉leaveRoom方法要离开哪个房间,所以这个参数是必须的。

如果User 一次只能在一个房间内,则代码如下所示:

public class User {

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

【讨论】:

  • 一个用户一次只能在一个聊天室中。目标是 leaveRoom() 当前聊天室而无需指定它。
  • 我试过了。 (Chatroom 不是写 ChatRoom 顺便说一句)它不起作用。使用 leaveRoom() 函数后,用户仍在聊天室中。
  • @RomanRutkowski 当User 加入房间时你会初始化currentRoom 吗?
  • 没关系。我指定了 joinRoom() 来将要加入的房间保存为 currentRoom。现在就像一个魅力。谢谢。
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2020-12-19
  • 1970-01-01
  • 2019-10-09
相关资源
最近更新 更多