Ciało metody w interface

0

Witam, czy umieszczenie ciał metod w interface jest sprzeczne z zasadami dobrego programowania? Pytanie odnosi się do metod używanych przy budowie layoutu a także do takich, które wstawiają konkretny element jako pierwszy w każdym oknie. Jeśli nie to czy istnieje inny sposób na ograniczenie ilości kodu żeby nie definiować tych samych metod w każdej klasie?

0

imo wrzucanie jakiejkolwiek logiki do interfejsu jest zlym pomyslem bo pokazuje i narzuca implementacje, powstaja dziwne zaleznosci ktore pozniej ciezko ogarnoac i ew. wycofac.
od tego sa klasy abstrakcyjne i/lub metody statyczne

1

ok, juz czaje, chodzi o trzymanie w interfejsie uzytkownika nie w interface :)
Co do metody statycznej to nie mam pomysłu gdzie mógłbym ją umieścić, żeby miały do niej dostęp wszystkie klasy z oknami.
w nowej klasie? np:

public final class WindowUtils
{
   public static void Method1()
   {
   }
}

i uzywac potem w ten sposob:

WindowUtils.Method1();
1

Chodzi o to, że klasa w której definiowane jest okno nie może dziedziczyć z klasy abstrakcyjnej bo dziedziczy już z JFrame

Ale przed chwilą mówiłeś że chcesz to powielać w róznych miejscach więc czemu nie zrobisz bazowej klasy dziedziczącej z JFrame, tam wrzucisz swoje wspólne metody a potem twoje pozostałe okna będą dziedziczyć z tej klasy a nie z JFrame bezpośrednio. Przykład:

class GenericStackPanel extends JPanel {

    GenericStackPanel(int axis) {
        layoutComponents(axis);
    }

    private void layoutComponents(int axis) {
        setLayout(new BoxLayout(this, axis));
    }
}

public class VerticalStackPanel extends GenericStackPanel {

    public VerticalStackPanel() {
        super(BoxLayout.Y_AXIS);
    }
}

public class HorizontalStackPanel extends GenericStackPanel {

    public HorizontalStackPanel() {
        super(BoxLayout.X_AXIS);
    }
}

class MojPanel extends HorizontalStackPanel{
   // bla bla bla
}

Alternatywnie masz statyczne utilsy, factory i delegacje.

0

Spróbowałem z final class i metodą statyczną i wszystko działa, ale mam sporo wywołań tych metod (do każdego panelu i komponentu) i z "WindowUtils.Method1();" kod wydaje się być mniej przejrzysty.

Ale przed chwilą mówiłeś że chcesz to powielać w różnych miejscach więc czemu nie zrobisz bazowej klasy dziedziczącej z JFrame

Z braku doświadczenia nie wpadłem na to:) To mój pierwszy większy projekt i pierwszy raz mój program będzie miał więcej niż jedno okno:) Zrobiłem już odpowiednią klasę i wygląda na to, że problemu już nie ma:) Dziękuję za wszystkie odpowiedzi

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