Thread View: pl.comp.lang.java
3 messages
3 total messages
Started by Jadalbert
Fri, 02 Dec 2016 17:32
@Inject "klasy bazowej"
Author: Jadalbert
Date: Fri, 02 Dec 2016 17:32
Date: Fri, 02 Dec 2016 17:32
26 lines
787 bytes
787 bytes
Nie rozumiem takiej sytuacji (java + jsf): public class X implements Serializable {...} public class X1 extends X implements Serializable {...} public class X2 extends X implements Serializable {...} public class Run { @Inject X y; ... } Oczywiście y może być (w innym miejscu kodu) X1 lub X2 w zależności od pewnego wyboru. W linii z @Inject mam uwagę kompilatora: "Unresolved ambiguous dependency found as result of type safe resolution" I program mi się nie uruchamia. Z logu serwera jest: Possible dependencies: - Managed Bean [class newpackage.X1] with qualifiers [@Default @Named @Any], - Managed Bean [class newpackage.X] with qualifiers [@Default @Named @Any], - Managed Bean [class newpackage.X2] with qualifiers [@Default @Named @Any] Dlaczego tak się dzieje?
Re: @Inject "klasy bazowej"
Author: arivald
Date: Sat, 03 Dec 2016 07:32
Date: Sat, 03 Dec 2016 07:32
43 lines
1399 bytes
1399 bytes
W dniu 2016-12-02 o 17:32, Jadalbert pisze: > Nie rozumiem takiej sytuacji (java + jsf): > > public class X implements Serializable {...} > > public class X1 extends X implements Serializable {...} > > public class X2 extends X implements Serializable {...} > > public class Run { > > @Inject X y; > ... > } > Oczywiście y może być (w innym miejscu kodu) X1 lub X2 w zależności od > pewnego wyboru. > > W linii z @Inject mam uwagę kompilatora: "Unresolved ambiguous > dependency found as result of type safe resolution" > I program mi się nie uruchamia. > > Z logu serwera jest: > Possible dependencies: > - Managed Bean [class newpackage.X1] with qualifiers [@Default @Named > @Any], > - Managed Bean [class newpackage.X] with qualifiers [@Default @Named @Any], > - Managed Bean [class newpackage.X2] with qualifiers [@Default @Named @Any] > > Dlaczego tak się dzieje? Bo wybór "X1 lub X2 w zależności od pewnego wyboru." musi być znany na etapie uruchamiania,czyli np. poprzez @Qualifier. Jak chcesz to zmieniać dynamicznie (X1 lub X2), to przypisuj jawnie. Albo zamiast X użyj fabryki Xów (lub raczej selektora Xów), która w zależności od czegoś zwróci X1 lub X2, oba nadal mogą być singletonami. A generalnie ten wzór z @Inject X, uzywaj X1 jest używany dla X będącego interfejsem, a X1 implementacją tego interfejsu. Wtedy działa bezproblemowo. -- Arivald
Re: @Inject "klasy bazowej"
Author: Jadalbert
Date: Sat, 03 Dec 2016 09:00
Date: Sat, 03 Dec 2016 09:00
51 lines
1710 bytes
1710 bytes
W dniu 03.12.2016 o 07:32, arivald pisze: > W dniu 2016-12-02 o 17:32, Jadalbert pisze: >> Nie rozumiem takiej sytuacji (java + jsf): >> >> public class X implements Serializable {...} >> >> public class X1 extends X implements Serializable {...} >> >> public class X2 extends X implements Serializable {...} >> >> public class Run { >> >> @Inject X y; >> ... >> } >> Oczywiście y może być (w innym miejscu kodu) X1 lub X2 w zależności od >> pewnego wyboru. >> >> W linii z @Inject mam uwagę kompilatora: "Unresolved ambiguous >> dependency found as result of type safe resolution" >> I program mi się nie uruchamia. >> >> Z logu serwera jest: >> Possible dependencies: >> - Managed Bean [class newpackage.X1] with qualifiers [@Default @Named >> @Any], >> - Managed Bean [class newpackage.X] with qualifiers [@Default @Named >> @Any], >> - Managed Bean [class newpackage.X2] with qualifiers [@Default @Named >> @Any] >> >> Dlaczego tak się dzieje? > Dzięki za odpowiedź. > Bo wybór "X1 lub X2 w zależności od pewnego wyboru." musi być znany na > etapie uruchamiania,czyli np. poprzez @Qualifier. Tak to właśnie zrozumiałem (i jest przecież napisane w logu serwera). Jednak wykonanie tego przykładu w "czystej" javie nie powodowało żadnych problemów. Stąd zdziwko. > > Jak chcesz to zmieniać dynamicznie (X1 lub X2), to przypisuj jawnie. > > Albo zamiast X użyj fabryki Xów (lub raczej selektora Xów), która w > zależności od czegoś zwróci X1 lub X2, oba nadal mogą być singletonami. > > A generalnie ten wzór z @Inject X, uzywaj X1 jest używany dla X będącego > interfejsem, a X1 implementacją tego interfejsu. Wtedy działa > bezproblemowo. > Obadam te rozwiązania.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads