Stworzenie instancji klasy na podstawie stringa

0

Cześć!
Szukam rozwiązania które pozwoli mi na podstawie zmiennej stworzyć instancje klasy.
Bardziej konkretnie:
Odpalam program z argumentem. Zależnie od niego potrzebuję stworzyć stworzyć instancję klasy i dalej na niej operować. Dodam że wszystkie klasy które będą w taki sposób inicjalizowane implementują jeden interfejs.
Oczywiście mógłbym użyć jakiegoś switcha albo if'a, ale nie jesteśmy zwierzętami :p
Czy mógłby ktoś nakierować mnie na rozwiązanie tego problemu?
Z góry dzięki :)

0

Może Class.forName(..)?

0

Ale ten argument to jest co? Bo jak nazwa klasy to mozesz zrobic Class.forName("").newInstance() zawsze.
Mógłyś też użyć sobie jakiegoś IoC i zrobić coś w stylu:

@Named("jakaśtamNazwa")
class X implements Y{}

@Named("jakaśtamInnaNazwa")
class V implements Y{}

@Named("jakaśtamJeszczeInnaNazwa")
class Z implements Y{}

Potem startując aplikacje skanujesz classpath i startujesz sobie wszystkie te beany a potem wyciągasz sobie z kontekstu po tej nazwie beana którego chcesz.

0

Dzięki za pomoc :)

Class.forName("").newInstance()

w zupełności wystarczy :)

0

Jeżeli nie jesteśmy zwierzętami, to użycie Class.forName(..) nie powinno nawet przyjść do głowy jako rozwiązanie. Raz takie coś widziałem i ile ja godzin straciłem żeby dojść co się tam dzieje, to nie zliczę. Część klas była w jakiś spośób użyta, ale nie mogłem wpaść jak, bo IDE nie pomagało w żadnym calu. "Find Usages" = nic, Wywalenie klasy = nic, odpalenie aplikacji = nic, jeden bardzo specyficzny przypadek podczas działania = błąd który nie mówił nic, bo część wyjątków była olewana :/. Jak już Java ma taki fajny ficzer jak sprawdzanie podczas kompilacji, to nie widzę powodu żeby go olać.

Jeżeli chcesz zrobić w pełni dynamicznie, to użyj jakiegoś IoC jak zasugerował Shalom. Ja jednak sugeruję użycie zwykłego wzorca Factory, który na podstawie Stringa zwróci odpowiedni obiekt. Switch i If jest w tym wypadku dużo lepszy niż przeinżynierowane, ale "legitne" javowo rozwiązanie. Proponuję jednak w tej fabryce zrobić mapę String na konstruktor i na podstawie tego tworzyć. Gdy nie znajdziesz odpowiedniego konstruktora, to rzucasz IllegalStateException i jesteś zabezpieczony gdy dojdzie nowa klasa której zapomnisz zaimplementować. Jak taki przypadek wystąpi, to masz na tacy co jest nie tak.

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