Kiedy extendować interfejs

Kiedy extendować interfejs
SU
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Postów:247
0

Jak podchodzicie do rozszerzania interfejsów.
Przykład, jest zamknięta klasa (niedostępna do modyfikowania), tworzę nowy interfejs, który, teoretycznie, jest moim odpowiednikiem tej klasy, ze customową metodą, którą chcę wykorzystać - rozszerzać bazowy interfejs ?

Teoretycznie, jest to logiczny odpowiednik, jednakże jeśli rozszserzę bazowy interfejs, mam wtedy oprócz metody, którą chcę wykorzystać metody z klasy zamkniętej - które nie wiem czy kiedykolwiek wykorzystam...

edytowany 3x, ostatnio: Sumekprog
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
4

Interface Segregation Principle mówi zeby nie dodawać metod których nie potrzebujesz. Nie widzę za bardzo po co u ciebie chciałbyś to robić. To że zrobiłem sobie klasę UsersList która wrappuje mi List<User> i wystawia jakieś "biznesowe" metody nie oznacza ze powinienem w tej klasie implementować interfejs List i robic jakieś delegacje. W 99% przypadków nie powinienem :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 godziny
  • Postów:3595
0

Czasem przy pisaniu API.

Taki podstawowy przypadek, że używa się extends to Serializable i interfejsy funkcyjne

Kopiuj
    interface MySerializableFunction<T, R> extends Serializable {
        R apply(T value);
    }
    
    public void test() {
        doSomethingWith1(e -> e.toString());
    }
    
    public void doSomethingWith1(final MySerializableFunction<Integer, String> mapper) {
        System.out.println(mapper.apply(1));
    }

Podobnie jakieś funkcje, np.

Kopiuj
       interface SQLFunction<T, R> extends Function<T, R> {
        @Override
        default R apply(T t) {
            try {
                return applyNonSafe(t);
            } catch (SQLException ex) {
                throw new RuntimeException(ex);
            }
        }
        
        R applyNonSafe(T t) throws SQLException;
    }

Czasem można mieć tego więcej, np. jakieś trochę bardziej skomplikowane drzewko strategii. Przy obiektach domenowych/biznesowych raczej staram się tego nie używać.

edytowany 1x, ostatnio: wartek01
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
Sumekprog napisał(a):

Jak podchodzicie do rozszerzania interfejsów.

Żyjąc według zasad Javy 6 nie pamiętam żebym kiedykolwiek to potrzebował
Od Javy 8 interfejsy działają trochę jak traity w Scali więc można współdzielić dzięki interfejsom implementację. Kiedyś udało mi się to użyć do czegoś, ale już nie pamiętam dokładnie

Przykład, jest zamknięta klasa (niedostępna do modyfikowania), tworzę nowy interfejs, który, teoretycznie, jest moim odpowiednikiem tej klasy, ze customową metodą, którą chcę wykorzystać - rozszerzać bazowy interfejs ?

Nie rozumiem tego przykładu


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.