Metoda statyczna w klasie

0

Siemka,

mam mały problem z dopisaniem metody statycznej getAllPeople() w poniższej klasie. Metoda ta ma zwracać imiona wszystkich Osób. Nie za bardzo wiem jak ją napisać. Proszę o pomoc.

public class Osoba {
    private String name;
    private String surname;
    private int age;
    private char gender;


    public Osoba(String name, String surname, int age, char gender) {
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.gender = gender;
    }

    public Osoba() {
    }

    @Override
    public String toString() {
        return "Osoba{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    } 
0

Z czym masz problem? Statyczna lista i w konstruktorze się do niej wpinasz

3

Ta klasa nie jest miejscem dla takiej metody. Umieść ją tam, gdzie trzymasz wszystkie osoby.

0

Shagrin niestety treść zadania wymaga napisania tej metody w klasie Osoba.

Caer dzięki za pomysł. Jeśli dobrze zrozumiałem twoja koncepcję będzie to wyglądało w ten sposob:

 import java.util.ArrayList;
import java.util.List;

public class Osoba {
    private String name;
    private String surname;
    private int age;
    private char gender;
    static ArrayList<String> osoby = new ArrayList<String>();


    public Osoba(String name, String surname, int age, char gender) {
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.gender = gender;
        osoby.add(name);        
    }
    
    public static ArrayList<String> getAllPeople(){
        return osoby;
    }
    

    public Osoba() {
    }

    @Override
    public String toString() {
        return "Osoba{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }
    
0

jestem mocno początkujący więc każda uwaga jest dla mnie cenna

0

Nie no wygląda prawie ok, z dokładnością do tego bezparametrowego konstruktora który nie dodaje do listy. Poza tym nie wiem czy zaleceniem było przechowywać informacje o wszystkich Osobach a zwracać tylko imiona, czy pamiętać tylko imiona, tak jak to zrobiłeś.

0

Chodziło jedynie o imiona. Racja zapomniałem dodać do listy w drugim konstruktorze. Dzięki bardzo za wszytskie odpowiedzi.

0

Co to za jakiś chory pomysł żeby trzymać takie informacje w polu statycznym? A wy ludzie jeszcze go umacniacie w tym, ja pier**.

Lepszym rozwiązaniem byłoby trzymać te osoby/imiona osób w liście (która nie jest staticiem, błagam). Zamienić to:

class PeopleRepository {
    private List<Person> people = new LinkedList<>();

    Person create() {
        Person person = new Person();
        people.add(person);
        return person;
    }
    
    List<Person> getAllPeople() {
        return people;
    }
   
}

class Person {
    @Override
    public String toString() {
        return "I'm a person";
    }
}
class Application {
    public static void main(String[] args) {
        PeopleRepository repository = new PeopleRepository();
        Person person1 = repository.create();
        Person person2 = repository.create();
        Person person3 = repository.create();

        repository.getAllPeople().forEach(System.out::println);
    }
}

Dla panów czepialskich przerobione, żeby się kompilowało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1