2016-02-27 2 views
-1
class Users{  
    private LinkedHashSet<Users> userList=new LinkedHashSet<Users>(); 
    private String name; 
     public Users(String name){ 
      this.name=name; 
      userList.add(this); 
     } 
     public void iterateList(){ 
      for (Users user:userList){ 
       System.out.println(user.getName()); //NO OUTPUT WHEN CALLED 
      } 
     } 
     public int getTotalUserCount(){ 
      return userList.size(); // OUTPUT IS 0 
     } 
} 

Я пытаюсь добавить экземпляры Users к userList при их создании. По какой-то причине, когда userList итерируется, я обнаружил, что объекты не были добавлены.объекты не добавлены конструктора список всех объектов

Кроме того, Однако при обращении к объекту индивидуально применяется метод доступа getName().

Что я делаю неправильно?

+0

См http://stackoverflow.com/questions/913560/what-is-static – Raedwald

ответ

1

Ваша проблема в том, что дизайн вашего класса нарушен. Ваш текущий код создает новый userList для каждого экземпляра пользователя, и это не то, что вы хотите. Вместо этого пользовательский класс не должен содержать UserList, а другой класс должен его обрабатывать, а затем, когда пользователи создаются, этот другой класс получает места пользователя в списке.

Другой вариант - сделать userList статическим полем, но это вызывает другие потенциальные проблемы, так как вы выбрасываете ребенка ООП с помощью ванны.

Если вы всегда хотите, чтобы пользователь добавил tot, который он перечисляет при создании Пользователя, то один из способов достижения этого и гарантировать, что это произойдет, - это создать пользователя через статический заводский метод.

0

Поскольку userList является переменной экземпляра, он будет каждый раз назначаться новым. Вы можете пометить userList как статическую переменную, чтобы она была доступна на уровне класса.

0

Я думаю, что вы хотите сделать статичным userList, так что в вашем приложении будет только один userList, иначе вы создадите новый список для каждого пользователя.

class Users { 
    private static LinkedHashSet<Users> userList=new LinkedHashSet<Users>(); 

    private String name; 

    public Users(String name){ 
     this.name = name; 
     userList.add(this); 
    } 

    public static void iterateList(){ 
     for (Users user : userList){ 
      System.out.println(user.getName()); 
     } 
    } 

    public static int getTotalUserCount(){ 
     return userList.size(); 
    } 

    public String getName() { 
     return name; 
    } 
} 

И тогда вы можете использовать его таким образом:

public class Main { 
    public static void main(String[] args){ 
     Users user1 = new Users("a"); 
     Users user2 = new Users("b"); 

     Users.iterateList(); 
     System.out.println(Users.getTotalUserCount()); 
    } 
} 
Смежные вопросы