arraylist内部示例不是私有的

ao218c7q  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(401)

当我创建一个示例时,我在那个示例中创建了一个arraylist,我得到了一个精确示例的指针,但是当我向那个arraylist添加项时,它并没有添加它,而是添加到一个类似于“public”列表的列表中。。。当配对被发现时,它会抓取配对中2个玩家的socketchannel id,并将他们添加到一个创建的房间中(至少应该如此),但它不会。。。
以下是在room类中创建arraylist的方法:

private static ArrayList<SocketChannel> room_players = new ArrayList<SocketChannel>();

这是在配对中发现2个玩家时的代码:

room Room = new room(); //
System.out.println("Making a new room");
ArrayList<SocketChannel> player_list = Room.getPlayerList();
SocketChannel s1 = matchmakingPlayers.get(i);
SocketChannel s2 = matchmakingPlayers.get(i-1);
_main.rooms.add(Room);
player_list.add(s1);
player_list.add(s2);

这是连接了2个客户端时的输出:

2 Players were found
Making a new room
Number of players in room: 2

但是当我已经有两个玩家在游戏中并且我想匹配新的2时,输出是:

2 Players were found
Making a new room
Number of players in room: 4

非常感谢您的帮助和建议!

bf1o4zei

bf1o4zei1#

但是我现在如何从其他类访问它呢?
有不同的方法:您可以将成员从私有更改为公共。。。

public final List<SocketChannel> room_players = new ArrayList<>();

您可以创建一个公共方法来获取值。。。

public List<SocketChannel> getRoom_players() {
    return room_players;
}

你也可以把这个班变成一个单身学生。如果您只想共享类的一个示例,并且可以从应用程序中的任何位置进行访问。也许这对你来说毫无意义。信息:https://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples

mwecs4sa

mwecs4sa2#

room_players 是静态成员,由类的所有示例共享。卸下 static 修饰符会给每个 Room 示例它是该变量的单独示例。

private final List<SocketChannel> room_players = new ArrayList<>();

相关问题