🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #152090

Re: @Inject "klasy bazowej"

#152090
From: Jadalbert
Date: Sat, 03 Dec 2016 09:00
51 lines
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.

Message-ID: <58427b80$0$15209$65785112@news.neostrada.pl>
Path: polish.pugleaf.net!archive.newsdeef.eu!apf1.newsdeef.eu!not-for-mail
References: <5841a204$0$5146$65785112@news.neostrada.pl> <o1tosl$10e4$1@gioia.aioe.org>