🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: @Inject "klasy bazowej"

#154278
From: arivald
Date: Sat, 03 Dec 2016 06:32
43 lines
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-mail
References: <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