Dostęp do obiektu z tablicy z wykonaniem metody

0

Witam.
Mam dwie klasy: Club oraz Membership.
Klasa Membership definiuje obiekty które zawierają nazwę członka, datę wstąpienia miesiąc, oraz osobno rok czyli pola typu: String, int, int. Posiada też metodę public int getMonth zwracającą wymieniony wcześniej miesiąc. Kodem coś takiego:

 public class Membership
{
    private String name;
    
    private int month;

    private int year;
    
    public Membership(String name, int month, int year)
        throws IllegalArgumentException
    {
        if(month < 1 || month > 12) {
            throw new IllegalArgumentException(
                "Month " + month + " out of range. Must be in the range 1 ... 12");
        }
        this.name = name;
        this.month = month;
        this.year = year;
    } 
public int getMonth()
    {
        return month;
    }

Klasa Club korzysta z klasy Members tworząc tablicę do której dodawane są obiekty klasy Membership:

public class Club
{
    private ArrayList memberList;
    
 
    public Club()
    {
       memberList = new ArrayList ();
    
        
    }

    public void join(Membership member)
    {
        memberList.add(member);
    }

Moim prostym zadaniem jest sprawdzenie obiektów w tablicy pod względem miesiąca wstąpienia czyli standardowo pętla wywołująca obiekty w tablicy po kolei w klasie Club:

public int joinedInMonth(int month)
    {
       // sprawdz wszyskich i zwroc tych ktorzy dolaczyli w podanym miesiacu
        if (month<1 || month>12)
       {
           System.out.println ("Given month is not valid");
           return 0;
        }
       int index = 0;
       int numberOfJoins =0;
       while (index < memberList.size())
       {   
           Membership memberTemp = ( Membership) memberList.get(index);
           int monthOfMember = memberTemp.getMonth();
           if (monthOfMember == month) numberOfJoins++;
           index++;
        }
        return numberOfJoins;
    }

Jak widać w pętli tworzony jest za każdym razem obiekt memberTemp do którego przekazywany jest obiekt z tablicy i później porównanie jego pola z podanym miesiącem itd. Rozwiązanie działa ale nie rozumiem dlaczego nie można dostać się szybko do pola obiektu np. w ten sposób (jak wcześniej próbowałem):

int numberOfJoins = memberList.get(index).getMonth();

czyli generalnie logicznie i prościej. Kompilator wtedy zwraca że nie rozpoznaje metody getMonth()?

0

Bo memberList.get(index) jest typu Object, który nie posiada metody getMonth(). Można tak:

((Membership) memberList.get(index)).getMonth();

Jednak wszystko byłoby prostsze, gdybyś parametryzował ArrayList:

private List<Membership> memberList;

public Club() {
    memberList = new ArrayList<Membership>();
}

// ...

memberList.get(index).getMonth();
0

Wielkie dzięki za odpowiedź. Pozdrawiam.

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