Accesso ai metodi C dalla classe A

0
class A {
    B bObject;
}

class B {
    private List<SomeType> list;
    public List getList() {return list;}
    public void foo(int i) {
       list.get(i).someTypeMethod(); // 2 dots
    }
}   

class SomeType {
    public void someTypeMethod() {}
}

Supponiamo di voler chiamare get nell'elenco da bObject nella classe A . Dovrei semplicemente chiamare getList().get(3) , o forse è meglio riscrivere un metodo nella classe B che recupera o aggiunge l'elemento nella posizione specificata da / nella lista?

In generale, se il campo B della classe non era un elenco, ma qualche altra classe C , dovrebbe B impedire alla classe A di chiamare direttamente C metodi?

    
posta user4205580 01.04.2016 - 10:50
fonte

2 risposte

2

Puoi seguire la Legge di Demeter .

Per lo più vuoi evitare di avere 2 o più "." nei tuoi metodi. Cerchi di evitare chiamate come "a.b.c.d.e" conosciute come treni relitti .

    
risposta data 01.04.2016 - 11:26
fonte
0

Questo è perfetto se non hai bisogno di regole specifiche per controllare il contenuto della lista.

se hai qualche logica specifica per implementare l'aggiunta / rimozione dell'oggetto, non devi esporre il getter nell'elenco ed esporre solo i metodi add / remove / find / iterator per proteggere il tuo elenco.

Un'altra soluzione potrebbe essere quella di estendere un tipo esistente di List (che ha detto ArrayList? :)) e sovrascrivere il metodo add / remove / .. per aggiungere la tua logica qui. Quindi in classe B stai con getList ().

    
risposta data 01.04.2016 - 11:10
fonte

Leggi altre domande sui tag