Προς το περιεχόμενο

Java state pattern


Προτεινόμενες αναρτήσεις

Δημοσ.

Άσχετα με το αν συνδυάζεται το 6 με το 7, όταν καλείς την getIterator με την υλοποίηση που έχεις κάνει απλά θα παίρνεις πίσω πάντα έναν κενό ListIterator.

 

Δεν κάνει compile το πρόγραμμα εφόσον δεν υπάρχει ο αντίστοιχος constructor

Δημοσ.

Δεν κάνει compile το πρόγραμμα εφόσον δεν υπάρχει ο αντίστοιχος constructor

 

Γιατί ποιός τον χρειάζεται?

Η κλάση κάνει implement τον Iterator , οπότε χρειάζεται υλοποιήσεις απλά για τις hasNext(), next() και remove()

 

Εκτός αν χάνω πάλι κάτι απο την άσκηση που όπως είπα και πρίν δεν έχω πάρει χαμπάρι τι ακριβώς συζητάμε :)

Δημοσ.

Γιατί ποιός τον χρειάζεται?

Η κλάση κάνει implement τον Iterator , οπότε χρειάζεται υλοποιήσεις απλά για τις hasNext(), next() και remove()

 

Εκτός αν χάνω πάλι κάτι απο την άσκηση που όπως είπα και πρίν δεν έχω πάρει χαμπάρι τι ακριβώς συζητάμε :)

Στο 7 έχει οριστεί constructor για την κλαση . Αυτός είναι ο ένας και μοναδικός constructor. Στο 6 ο φιλος δημιουργεί αντικείμενο λανθασμένα καθώς πρέπει να χρησιμοποιήσει αυτόν τον constructor .

 

Δηλαδη το 6 πρεπει να γίνει

Return new ListIterator(this)

public interface Iterator {
   
    public Integer getNext();
    public boolean hasNext();
   
}

public interface ICollector {
   
    public Iterator getIterator();
 
}

public class ListIterator implements Iterator {
   
   private Mylist alist;
   private int index= 0;
   private int size=-1;
   public ListIterator(Mylist alist){
          this.alist=alist;
          size=this.alist.getSize();
   }
   public Integer getNext(){
           return alist.getItem(index++);
  }
  public boolean hasNext(){
           return (index<size);
  }
 
}

public class Mylist implements ICollector {
   
  private List<Integer> Integers=new ArrayList<Integer>();

 // Aztec - added constructor to provide some values start
  public Mylist()
  {
     Integers.add(1);
     Integers.add(2);
     Integers.add(3);
     Integers.add(4);
  }
 // Aztec - added constructor to provide some values end

​ public Iterator getIterator(){
     return new ListIterator(this);
   }
  public int getSize()
  {
      return Integers.size();
  }
  
  public Integer getItem(int i)
  {
      return Integers.get(i);
  }
}

Οπότε αν κάνουμε ενα μικρό τεστ

 public static void main(String[] args) {
           Mylist mylist=new Mylist();
           for(Iterator iter = mylist.getIterator(); iter.hasNext(){
                System.out.println(iter.getNext());}
        }

έχουμε

run:
1
2
3
4
BUILD SUCCESSFUL (total time: 0 seconds)
Δημοσ.

οκ την εκφώνηση την βλέπεις κάπου εσύ? 

Τώρα καταλαβαίνω ότι δημιουργεί τον δικό του Iterator και φτιάχνει υλοποίηση για αυτόν, είναι λίγο αχταρμας το ποστ. (σορρυ TS)

  • 4 εβδομάδες αργότερα...
Δημοσ.

 

στα interface τα δυο που έχουμε μόνο οι μέθοδοι 

    public Integer getNext();

    public boolean hasNext();

public Iterator getIterator();

πρέπει να γραφτούν????

 

οι μέθοδοι public int getSize(), public Integer getItem(int i) δεν θα πρεπε να γραφτούν κ αυτές σε κάποιο interface?

Δημοσ.

Τεχνικα θα μπορούσες να φτιάξεις ενα νέο interface με τις μεθόδους και η Mylist να κάνει implement ΚΑΙ αυτο το interface. Θα μπορούσες επίσης να θεωρήσεις ότι o Iterator είναι super interface ενός custom δικού σου και η Μylist να κάνει implement το τελευταίο. Θεωρητικά και πρακτικά στο θέμα σου δεν νομίζω να υπάρχει λογος  και σίγουρα δεν πρέπει να τις βάλεις στα interfaces που έχεις ήδη υλοποιήσει (Iterator,ICollector)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...