<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-2"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Monaco;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Nekem </span><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>úgy tűnik, nem lehet megúszni a</span>&nbsp;<span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@SuppressWarnings</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>(</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#3B3DF5'>&quot;unchecked&quot;</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>) </span></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>kiírását</span><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>.<o:p></o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Szerintem az </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#032FC3'>analyzerMap</span><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>-nek kéne valami ilyesmi:<o:p></o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href="http://stackoverflow.com/questions/416540/java-map-with-values-limited-by-keys-type-parameter">http://stackoverflow.com/questions/416540/java-map-with-values-limited-by-keys-type-parameter</a><o:p></o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Ekkor a get-ben nem kell majd kasztolás, mert azt a map elvégzi.<o:p></o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>üdv,<o:p></o:p></span></p><p class=MsoNormal><span lang=HU style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Laci<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> javalist-bounces@lists.javaforum.hu [mailto:javalist-bounces@lists.javaforum.hu] <b>On Behalf Of </b>Peter Verhas<br><b>Sent:</b> Friday, June 08, 2012 6:39 PM<br><b>To:</b> Java lista<br><b>Subject:</b> Re: [Javalist] generics kérdés<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><p class=MsoNormal>&gt;On 2012.06.08., at 12:01, Vig, Balázs wrote:<o:p></o:p></p></div></div><p class=MsoNormal>&gt;Nem értem, miért zárod ki az interfészeket és absztrakt osztályokat. Nekem még nem sikerült ilyenekkel eljárást hívnom --&gt; minden metódus implementálva lesz, mire hozzád eljut.<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Pont fordítva: Csak interface-t szeretnék megengedni.<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Rá akarom szorítani azt aki használja a factory-t, hogy ne konkrét osztály instance-ot kérjen, hanem interface megvalósítást. Hogy az milyen osztályból lesz létrehozva, az a factory dolga.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Most ez az interface a javaslatok alapján:<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#961A65'>public</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'> </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#961A65'>interface</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'> Factory {</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#961A65'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>public</span> &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; <span style='color:#961A65'>void</span> create(Class&lt;T&gt; interf4ce,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Class&lt;? <span style='color:#961A65'>extends</span> T&gt; cl4ss);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp;&nbsp;<span style='color:#961A65'>public</span> &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; T get(Class&lt;T&gt; klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>public</span> <span style='color:#961A65'>void</span> clean();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>}<o:p></o:p></span></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>(a clean csak kipucolja a factory-t, generics szempontból érdektelen).<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Van egy abstract osztály, ami implementálja ezt az interfészt:<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#961A65'>public</span><span style='font-size:8.5pt;font-family:"Monaco","serif"'> <span style='color:#961A65'>abstract</span> <span style='color:#961A65'>class</span> AbstractFactory <span style='color:#961A65'>implements</span> Factory {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@Override<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>public</span> &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; <span style='color:#961A65'>void</span> create(Class&lt;T&gt; interf4ce,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Class&lt;? <span style='color:#961A65'>extends</span> T&gt; klass) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; assertInterface(interf4ce);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; assertImplements(interf4ce, klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; assertPattern(klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>try</span> {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Constructor&lt;? <span style='color:#961A65'>extends</span> T&gt; constructor = klass.getDeclaredConstructor();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; constructor.setAccessible(<span style='color:#961A65'>true</span>);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T object = (T) constructor.newInstance();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(interf4ce, object);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; } <span style='color:#961A65'>catch</span> (Exception e) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>throw</span> <span style='color:#961A65'>new</span> BasicInterpreterInternalError(<span style='color:#3B3DF5'>&quot;Can not instantiate &quot;</span> + klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>// runtime ellenőrzések kiszedve<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>protected</span> <span style='color:#961A65'>void</span> assertPattern(Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt; klass) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>...<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>protected</span> <span style='color:#961A65'>void</span> assertImplements(Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt; interf4ce,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>...<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>protected</span> <span style='color:#961A65'>void</span> assertInterface(Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt; klass) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>...<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp;&nbsp;<span style='color:#961A65'>abstract</span> &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; <span style='color:#961A65'>void</span> set(Class&lt;T&gt; interf4ce,<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T object);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>}<o:p></o:p></span></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>és van egy thread local konkrét osztály:<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#961A65'>public</span><span style='font-size:8.5pt;font-family:"Monaco","serif"'> <span style='color:#961A65'>class</span> ThreadLocalFactory <span style='color:#961A65'>extends</span> AbstractFactory {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>private</span> <span style='color:#961A65'>static</span> Map&lt;Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt;, FactoryManaged&gt; newMap() {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>return</span> <span style='color:#961A65'>new</span> HashMap&lt;Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt;, FactoryManaged&gt;();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>private</span> <span style='color:#961A65'>static</span> ThreadLocal&lt;Map&lt;Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt;, FactoryManaged&gt;&gt; <span style='color:#032FC3'>analyzerMap</span> = <span style='color:#961A65'>new</span> ThreadLocal&lt;Map&lt;Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt;, FactoryManaged&gt;&gt;() {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; &nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@Override<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>protected</span> Map&lt;Class&lt;? <span style='color:#961A65'>extends</span> FactoryManaged&gt;, FactoryManaged&gt; initialValue() {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>return</span> newMap();<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; };<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@Override<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>public</span> <span style='color:#961A65'>void</span> clean() {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#032FC3'>analyzerMap</span>.set(newMap());<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#4D78C5'>/**</span><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#4D78C5'>&nbsp;&nbsp; &nbsp; * This method is used by the {@see AbstractFactory} to store created<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#4D78C5'>&nbsp;&nbsp; &nbsp; * objects.<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#4D78C5'>&nbsp;&nbsp; &nbsp; */<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; <span style='color:#961A65'>void</span> set(Class&lt;T&gt; klass, T analyzer) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#032FC3'>analyzerMap</span>.get().put(klass, analyzer);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@SuppressWarnings</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>(</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#3B3DF5'>&quot;unchecked&quot;</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>)</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'><o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@Override<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; <span style='color:#961A65'>public</span> &lt;T <span style='color:#961A65'>extends</span> FactoryManaged&gt; T get(Class&lt;T&gt; klass) {<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; assertInterface(klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>&nbsp; &nbsp; &nbsp; &nbsp; </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#489075'>// </span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#8FB0C8'>TODO</span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#489075'> how to alter it to avoid this unchecked cast<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; &nbsp; &nbsp; <span style='color:#961A65'>return</span> (T) <span style='color:#032FC3'>analyzerMap</span>.get().get(klass);<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>&nbsp; &nbsp; }<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'><o:p>&nbsp;</o:p></span></p></div><div><p class=MsoNormal><span style='font-size:8.5pt;font-family:"Monaco","serif"'>}<o:p></o:p></span></p></div></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Most már csak az a kérdés, hogy hogyan lenne korrekt, hogy a&nbsp;<span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#777777'>@SuppressWarnings</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>(</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:#3B3DF5'>&quot;unchecked&quot;</span></span><span class=apple-style-span><span style='font-size:8.5pt;font-family:"Monaco","serif";color:black'>)&nbsp;</span></span>ne legyen szükséges. Amiket kezel azoknak van interface-ük, és minden ilyen interface extends FactoryManaged. Ami egyébként teljesen üres. Valamint minden osztálynak pontosan egy private vagy protected vagy default láthatóságú, de semmiképpen sem publikus default konstruktora van, és ezt most runtime ellenőrzi, és ha nem stimmel, akkor egy saját X extends Error()-t dob. Köszönöm a többi javaslatot is, amik nem voltak relevánsak a konkrét esetben, mert hasznosak voltak.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><div><div><div><p class=MsoNormal><span class=apple-style-span><span style='font-family:"Helvetica","sans-serif";color:#888888'>--</span></span><span style='font-family:"Helvetica","sans-serif";color:#888888'><br><span class=apple-style-span>Verhás Péter</span><br><span class=apple-style-span><a href="mailto:peter@verhas.com">peter@verhas.com</a></span><br><span class=apple-style-span>+36(30)9306805</span><br><span class=apple-style-span>skype: verhas</span></span><span style='font-family:"Helvetica","sans-serif"'><o:p></o:p></span></p></div></div><p class=MsoNormal><span style='font-family:"Helvetica","sans-serif"'><o:p>&nbsp;</o:p></span></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p></div></div></div></body></html>