JAk zaimplementować interfejs rozszerzający inny interfejs

0

Witam, mam problem jak zaimplementować interfejs rozszerzający inny interfejs

public interface Block {
    String getColor();
    String getMaterial();

}

public interface CompositeBlock  extends Block{
    List<Block> getBlocks();
}

  Block blockk ;
    CompositeBlock block = new CompositeBlock() {
        @Override
        public List<Block> getBlocks() {
          return   blocks;
        }

        @Override
        public String getColor() {
            return block.getColor();
        }

        @Override
        public String getMaterial() {
            return null;
        }
    };

Dostaje stackOwerFlow.
Z góry dzieki :P

0

Wstaw cały kod, bo to jest jakaś losowa sklejka, co się nawet nie skompiluje.

return   blocks;

co to niby jest blocks?

return block.getColor();

co to jest block? Jeżeli to jakimś cudem się skompilowało, to znaczy, że użyłeś CompositeBlock block tej referencji w środku jej implementacji i wywołujesz getColor w nieskończoność.

0

@teka93 normalnie, bo takie rozszerzenie dodaje po prostu metody z pierwszego interfejsu do drugiego. Twój problem jest gdzieś indziej. Nie wiadomo czym u ciebie jest blocks i nie wiadomo tez za bardzo co znaczy getColor albo getMaterial jak masz composite block złożony z wielu innych. Nie bardzo ma to jakiś sens.

0

Jeżeli chcesz mieć absurdalną implementację, byle się kompilowało, to zwróć 3x null (15,20,25 linia).

Jeżeli chcesz mieć coś typowego dla szkolnych przykładów, to wypada stworzyć klasę implementującą i jeden i drugi interfejs, dajmy na to MyBlock i MyCompositeBlock.
Wtedy MyBlock ma 2 pola (typu String) ze swoimi właściwościami.
Wtedy MyCompositeBlock to jak rozumiem węzeł grafu który ma jeden "główny" block i listę jakoś skojarzonych blocków. Tu znowu będą 2 pola, jedno z głównym blokiem, a drugie z listą bloków. Metody wynikające z Block po prostu przekierowujesz do głównego bloku return mainBlock.getColor();.

0

Prawdopodobnie robisz to w niewłaściwy sposob - jeśli implementujesz composite pattern, to tak naprawdę chcesz mieć dwie klasy impelmentujace jeden interfejs - np. SingleBlock i CompositeBlock nad jednym interfejsem np. Block

https://www.baeldung.com/java-composite-pattern

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