Java typ genertyczny

0

Czesc, mam maly problem nie jestem w stanie dostac sie do typu generycznego, a jest mi to potrzbene. Uzywam springa do wiazania listy repo na podstawie danego typu obiektu w tym wypadku abstrakcyjna classa Animal.
ex:

List<JpaRepository<<? extends Animal>,Long>> list;

@Autowired
public Controller(List<JpaRepository<? extends Animal,Long>> list){
this.list = list;
}

Dziala perfekcyjnie, ale chce w kolejnej metodzie dostac sie do typu wildcard tzn chce wiedziec czy JpaRepository przyjmuje Chomika czy Krokodyla (oba rozszerzaja klase animal).Chomik, Krokodyl ma swoje repozytorium JpaRepository<Chomik,Long>,JpaRepository<Krokodyl ,Long>

Ktos moze cos poradzic?

1

Nie da się bo kompilator Javy usuwa informacje o generykach podczas kompilacji

1
        SimpleJpaRepository target = (SimpleJpaRepository) AopProxyUtils.getSingletonTarget(list.get(0))
        Method getDomainClass = SimpleJpaRepository.class.getDeclaredMethod("getDomainClass");
        getDomainClass.setAccessible(true);
        Class clazz = (Class) getDomainClass.invoke(target);
        if (clazz.equals(Krokodyl.class) {....}

Oczywiście sam fakt że się da nie oznacza że się powinno…

0

Czyli jednak sie da :D
Dzieki wszystkim za odpowiedz, moze faktycznie powinienem zmienic design. Chcialem uniknac dokladania za kazdym razem repo do glownego serwisu(30 animals 30 repo autowired - do kazdego osobne metody.. ), a tak bym sobie to zmapowal na starcie i wybieral z Map<String,JpaRepository> repo ktore mnie interesuje po sparsowaniu jsona.

0

@hallowedALG jeśli to Spring to akurat możesz tak zrobić "automatycznie". Wystarczy że zrobisz:

@Autowired
Map<String, JpaRepository<? extends Animal>,Long>> repositories;

I Spring ci je wszystkie tam wstrzyknie a kluczem będzie nazwa beana... Inna sprawa czy to jest dobre rozwiązanie.

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