Как напечатать вывод метода доступа для каждого экземпляра класса? - PullRequest
0 голосов
/ 25 марта 2011

Как бы вы могли создать класс, подобный этому

public class tmUser {

    private String Username;
    private int wHours;
    static int numUsers;


    public tmUser(){
        Username = "";
        wHours = 0;
    }

    public tmUser(String U, int H){
        Username = U;
        wHours = H;
    }

    public void setUsername(String U){
        Username = U;
    }

    public void setwHours(int H){
        wHours = H;
    }

    public String getUsername(){
        return Username;
    }

    public int getwHours(){
        return wHours;
    }

    public static void initnumUsers(){
        numUsers = 0;
    }

    public static int getnumUsers(){
        return numUsers;
    }
}

, а затем распечатать все экземпляры имени пользователя экземпляров "tmUser"?в может быть для каждого цикла?Я надеюсь на что-то вроде

for each(tmUser){
    System.out.println(Username);
}

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

Спасибо, заранее!

Ответы [ 5 ]

1 голос
/ 25 марта 2011

У вас почти было это:

List<TmUser> tmUsers = ... 
for(TmUser user : tmUsers) {
    System.out.println(user.getUsername());
}

Вы также хотели бы использовать tmUser в TmUser.

0 голосов
/ 25 марта 2011

Как уже указывалось в ответах, это потребовало бы поддержания некоторой структуры данных, которая содержит ссылки на все экземпляры tmUser (например, List<tmUser>).

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

0 голосов
/ 25 марта 2011

3 текущих ответа в основном одинаковы.Просто хотел добавить, что если класс определил toString(), который возвращает имя пользователя, нет необходимости добавлять вызов метода .getUsername(), поскольку System.out.println(Object) автоматически вызовет метод toString().1006 * является ли это может работать для вашего случая использования является дискуссионным.Метод toString() обычно предоставляет больше данных об объекте.

0 голосов
/ 25 марта 2011

Сначала вам нужно хранить все tmUser экземпляры.Вы можете сделать это следующим образом:

public class tmUser {
...
public static List<tmUser> USERS = new ArrayList<tmUser>();

public tmUser() {
   ...
   USERS.add( this );
}

и затем напечатать:

for (tmUser user : tmUser.USERS) {
    System.out.println(user.getUsername());
}
0 голосов
/ 25 марта 2011

Когда вы создаете tmUser, добавьте его в коллекцию, например

List<TmUser> tmUsers = new ArrayList<TmUser>();

TmUser tmUser = new TmUser(username, hoursWorked);
tmUser.add(tmUser);

// later
for(TmUser tmUser: tumUsers) 
  System.out.println(tmUser.getUsername());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...