Article View: pl.comp.lang.java
Article #154278Re: @Inject "klasy bazowej"
From: arivald
Date: Sat, 03 Dec 2016 06:32
Date: Sat, 03 Dec 2016 06:32
43 lines
2206 bytes
2206 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
Technical Details
Message-ID:
<o1tosl$10e4$1@gioia.aioe.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!aioe.org!.POSTED!not-for-mailReferences:
<5841a204$0$5146$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!news.mixmin.net!aioe.org!.POSTED!not-for-mail From: arivald <arivald@nowhere.interia.pl> Newsgroups: pl.comp.lang.java Subject: Re: @Inject "klasy bazowej" Date: Sat, 3 Dec 2016 07:32:01 +0100 Organization: Aioe.org NNTP Server Lines: 44 Message-ID: <o1tosl$10e4$1@gioia.aioe.org> References: <5841a204$0$5146$65785112@news.neostrada.pl> NNTP-Posting-Host: cZfWUlemTrEz0uwFBidLYg.user.gioia.aioe.org Mime-Version: 1.0 X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 X-Notice: Filtered by postfilter v. 0.8.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit