Java - вернуть значение объекта - PullRequest
1 голос
/ 25 декабря 2010

Привет, у меня есть следующий код:

public List<Person> findAll() {

    List<Person> copy = new ArrayList<Person>();
    for (Person person : personer) {
        copy.add(person);
    }

    return copy;

}

Но когда я проверяю это, я получаю только следующее, а не значение:

[Person @ 15c7850, Person @1ded0fd, Person @ 16a9d42]

Как получить значения, а не как выше?Где я вставляю человека, код выглядит так:

public boolean insert(String name, String nbr) {

    if (containsName(name)) {
                    return false;
            }
    Person person = new Person(name, nbr);
    personer.add(person);

            return true;
}

, а вот мой класс Person:

class Person {

private String name;
private String nbr;





public Person (String name, String nbr) {
    this.name = name;
    this.nbr = nbr;
}


public String getName() {
    return name;
}


public String getNumber() {
    return nbr;
}
}

Ответы [ 6 ]

4 голосов
/ 25 декабря 2010

Вы уже получаете нужные объекты.

То, что вы видите, является внутренним представлением этих объектов.

Вы должны пройти через них и вызывать их соответствующие методы, чтобы увидеть информациювы, вероятно, хотите увидеть.

Если вы не удовлетворены этими результатами, вы должны переопределить toString, чтобы предоставить вам более значимую информацию.

Обновление :

после просмотра вашей правки вы должны добавить toString аналогично этому в вашем Person классе:

@Override
public String toString() {
    return "Name: " + name + ", number: " + nbr; 
}

Кстати, вы сохраняете nbr какстрока, и очевидно, что это должно быть целое число.Поэтому я бы предложил изменить его тип на int или Integer.

2 голосов
/ 25 декабря 2010

Вы получаете объект List обратно. Вы можете использовать объект Person для получения нужных вам данных. Чтобы добраться до объектов Person, выполните итерацию по списку.

List<Person> people = findAll();
for Person p : people {
    String phoneNumber = p.phoneNumber();
    String name = p.Name();
}
1 голос
/ 25 декабря 2010

Вы распечатываете объект, который по умолчанию имеет значение toString, унаследованное от класса Object. Это распечатает тип объекта и его местоположение в памяти (то есть: Person @ 1ded0fd).

Если вы хотите увидеть что-то еще, вы можете переопределить метод toString в вашем классе:

public class Person {
  private String name;

  public Person(String name) {
    this.name = name;
  }

  public String getName() {
    return this.name;
  }    

  public String toString() {
    return this.name;
  }
}

Если бы ваш класс выглядел так, как указано выше, это позволило бы вам сделать что-то вроде этого:

Person p = new Person("John");
System.out.println(p);
 > John

Вы также можете просто взять его как есть и распечатать любую информацию из него, не переопределяя метод toString.

Person p = new Person("John");
System.out.println(p.getName());
 > John
1 голос
/ 25 декабря 2010

Поместите что-то подобное в класс Person (не меняйте имя метода!):

public String toString() {
    return name;//change this line
}
1 голос
/ 25 декабря 2010

Переопределите метод toString () в классе Person, если вы хотите получить лучшее описание при печати результатов.

0 голосов
/ 25 декабря 2010

Какое значение или какое свойство класса Person вы хотите получить из ArrayList?Этот тип значения (Person @ 15c7850 и т. Д.) Показывает, что случайный идентификатор объекта Person, назначенный JVM при использовании

System.out.print(copy).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...