Dynamiczne ładowanie klas a dziedziczenie

0

Chciałbym w projekcie zastosować rozwiązanie, które nie wiem czy zadziała. Koncepcja jest taka:
W mojej aplikacji mam abstrakcyjną klasę Algorytm i obiekty Algorytm są używane do dosyć złożonych obliczeń. Nie wiem jeszcze jaka implementacja algorytmu będzie najlepsza. Dlatego chciałbym klasy dziedziczące po Algorytm ładować dynamicznie z zewnętrznego folderu wtedy - jeśli je tam umieszczę. Aplikację razem z podstawową implementacja algorytmu chcę spakować do jara, a lepsze implementacje algorytmu dopisywać później i ładować dynamicznie. Jednak muszą one dziedziczyć po Algorytm.

I tu moje pytania: jak zapewnić dziedziczenie, tzn. czy będę potrzebował jakiejś biblioteki z definicja klasy Alogytm? I czy po załadowaniu klasa zostanie rozpoznana poprawnie jako dziedzicząca po Algorytm? Czy przy uzyciu classloadera i refleksji będę mógł stworzyć obiekt takiej klasy i posługiwać się nim z zachowaniem pełnej funkcjonalności?

Takie rozwiązanie bardzo by mi odpowiadalo, ale nie wiem czy to jest w Javie. Proszę o poradę.

0

Nie starczą ci zwykłe funkcje wirtualne?

0

Tak. Mam parę programów, które działają na bardzo podobnej zasadzie. Prócz plików class warto też podmieniać jakiś plik tekstowy (xml?) opisujący pliki z algorytmami. Można wówczas w programie wyświetlać informacje o algorytmie, unika się też błędów wykonania, gdy do katalogu z algorytmami, ktoś wrzuci klasę zupełnie innego typu.

1

Takie coś to najłatwiej za pomocą OSGi zrobić. Względnie Spring Dynamic Modules.

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