实例内部的Arraylist不是私有的

时间:2019-02-04 01:21:36

标签: java class arraylist

当我创建一个实例时,我在该实例中创建了一个ArrayList,并且得到了该确切实例的指针,但是当我向ArrayList中添加项目时,它并没有添加它,而是像“ public”一样添加了它清单... 找到配对后,它会在配对中获取2个玩家的SocketChannel ID,并将其添加到已创建的房间中(至少应该如此),但是并没有...

这是我在房间类中创建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个新玩家时,输出为:

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

非常感谢您提供任何帮助或建议!

2 个答案:

答案 0 :(得分:1)

由于room_players是静态成员,因此该类的所有实例都共享它。删除static修饰符将为每个Room实例赋予该变量自己的单独实例。

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

答案 1 :(得分:0)

  

但是我现在如何从其他班级访问它?

有不同的方法: 您可以将成员从私人更改为公开...

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