<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JAVA Developer</title>
	<atom:link href="http://tomaszmichalak.pl/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://tomaszmichalak.pl</link>
	<description>M.Eng Tomasz Michalak</description>
	<lastBuildDate>Wed, 15 Feb 2012 19:29:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Testy jednostkowe</title>
		<link>http://tomaszmichalak.pl/index.php/2012/02/15/testy-jednostkowe/</link>
		<comments>http://tomaszmichalak.pl/index.php/2012/02/15/testy-jednostkowe/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 19:29:42 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>

		<guid isPermaLink="false">http://tomaszmichalak.pl/?p=90</guid>
		<description><![CDATA[Nie służą do wyszukiwania błędów funkcjonalnych – koncentrują się one na fragmencie funkcjonalności, nie testują integracji komponentów. Pozwalają na poprawny refactoring oraz rozwój kodu (dokumentują zachowanie komponentów, pozwalają na ocenę poprawności projektu pojedynczego komponentu). Są przeciwieństwem do testów integracyjnych, gdzie testujemy całą funkcjonalność, często bez wiedzy na temat wewnętrznych rozwiązań projektowych.
Dobre praktyki:

każdy test powinien być [...]]]></description>
			<content:encoded><![CDATA[<p>Nie służą do wyszukiwania błędów funkcjonalnych – koncentrują się one na fragmencie funkcjonalności, nie testują integracji komponentów. Pozwalają na poprawny refactoring oraz rozwój kodu (dokumentują zachowanie komponentów, pozwalają na ocenę poprawności projektu pojedynczego komponentu). Są przeciwieństwem do testów integracyjnych, gdzie testujemy całą funkcjonalność, często bez wiedzy na temat wewnętrznych rozwiązań projektowych.</p>
<p>Dobre praktyki:</p>
<ul>
<li>każdy test powinien być niezależnych względem innych (konkretne zachowanie komponentu (zachowanie, a nie metoda publiczna) powinno być testowane tylko raz – w przeciwnym przypadku zmiana zachowania komponentu wymaga poprawy wielu różnych testów).</li>
</ul>
<ul>
<li> testy powinny dotyczyć tylko metod publicznych (kontraktów), więc wyjściem do pisania testów powinny być dobrze zdefiniowane interfejsy.</li>
</ul>
<ul>
<li> najpierw black box, później white box (implementacja testu w oparciu o opis funkcjonalny &#8211; często opis w interfejsie, później przegląd implementacji i dodatkowe testy)</li>
</ul>
<ul>
<li> zbyt duża liczba assercji to problem! Jeśli testujemy funkcjonalność biznesową odpowiedzialną za np. zamykanie paczki z transakcjami to nie powinniśmy sprawdzać jednocześnie wszystkich własności paczki (tylko jej status).</li>
</ul>
<ul>
<li> wywołania komponentów zależnych powinny być mockowane (poza warstwą DAO) – np. EasyMock – pozwala to na dużo łatwą ocenę miejsca wystąpienia błędu</li>
</ul>
<ul>
<li>nazewnictwo:</li>
</ul>
<blockquote>
<ul>
<li> nazwa klasy (nie interfejsu) + Test</li>
</ul>
</blockquote>
<blockquote>
<ul>
<li> metody: testowana metoda + scenariusz + wynik (np. removeApplicationIfActiveStateActiveStateException)</li>
</ul>
</blockquote>
<ul>
<li> testując komponenty biznesowe nie powinniśmy mockować obiektów DAO</li>
</ul>
<ul>
<li> każdy test sam ustanawia dla siebie środowisko i po jego wykonaniu wszystkie zmiany na bazie testowej powinny być rollbackowane</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2012/02/15/testy-jednostkowe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparing Integer/Long/Short/Float/Double with &#8216;equals&#8217; method.</title>
		<link>http://tomaszmichalak.pl/index.php/2011/05/03/comparing-integerlongshortfloatdouble-with-equals-method/</link>
		<comments>http://tomaszmichalak.pl/index.php/2011/05/03/comparing-integerlongshortfloatdouble-with-equals-method/#comments</comments>
		<pubDate>Tue, 03 May 2011 18:52:48 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Double]]></category>
		<category><![CDATA[equals]]></category>
		<category><![CDATA[Float]]></category>
		<category><![CDATA[Integer]]></category>
		<category><![CDATA[Long]]></category>
		<category><![CDATA[Short]]></category>

		<guid isPermaLink="false">http://tomaszmichalak.pl/?p=81</guid>
		<description><![CDATA[
Integer i7 = 7;
long l7 = 7L;
System.out.println&#40;i7.equals&#40;l7&#41;&#41;;

Wynikiem jest false.

public boolean equals&#40;Object obj&#41; &#123;
	if &#40;obj instanceof Integer&#41; &#123;
	    return value == &#40;&#40;Integer&#41;obj&#41;.intValue&#40;&#41;;
	&#125;
	return false;
&#125;

]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Integer</span> i7 <span style="color: #339933;">=</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">long</span> l7 <span style="color: #339933;">=</span> 7L<span style="color: #339933;">;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>i7.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>l7<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wynikiem jest <strong>false</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> equals<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>obj <span style="color: #000000; font-weight: bold;">instanceof</span> <span style="color: #003399;">Integer</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #000000; font-weight: bold;">return</span> value <span style="color: #339933;">==</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span><span style="color: #009900;">&#41;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">intValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2011/05/03/comparing-integerlongshortfloatdouble-with-equals-method/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Arrays to Lists in Java</title>
		<link>http://tomaszmichalak.pl/index.php/2010/08/03/arrays-to-lists-in-java/</link>
		<comments>http://tomaszmichalak.pl/index.php/2010/08/03/arrays-to-lists-in-java/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 20:29:16 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Arrays]]></category>
		<category><![CDATA[Lists]]></category>

		<guid isPermaLink="false">http://tomaszmichalak.pl/?p=52</guid>
		<description><![CDATA[Bardzo przydatną funkcją w Javie jest Arrays.asList(). Posiada jednak pewny kontrakt &#8211; zmiany w tablicy są widoczne w liście i na odwrót. Wynika to z faktu, że tworzona lista jest jedynie &#8220;widokiem&#8221; na tablicę &#8211; odwołuje się do tego samego miejsca na stercie. Obrazuje to poniższy przykład:

String&#91;&#93; tablica = new String&#91;&#93; &#123;&#34;1&#34;, &#34;2&#34;, &#34;3&#34;, &#34;4&#34;, [...]]]></description>
			<content:encoded><![CDATA[<p>Bardzo przydatną funkcją w Javie jest <code>Arrays.asList()</code>. Posiada jednak pewny kontrakt &#8211; zmiany w tablicy są widoczne w liście i na odwrót. Wynika to z faktu, że tworzona lista jest jedynie &#8220;widokiem&#8221; na tablicę &#8211; odwołuje się do tego samego miejsca na stercie. Obrazuje to poniższy przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> tablica <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;1&quot;</span>, <span style="color: #0000ff;">&quot;2&quot;</span>, <span style="color: #0000ff;">&quot;3&quot;</span>, <span style="color: #0000ff;">&quot;4&quot;</span>, <span style="color: #0000ff;">&quot;5&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;</span> list <span style="color: #339933;">=</span> <span style="color: #003399;">Arrays</span>.<span style="color: #006633;">asList</span><span style="color: #009900;">&#40;</span>tablica<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// zmiana elementu </span>
list.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #0000ff;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> tab <span style="color: #339933;">:</span> tablica<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>tab <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>		
&nbsp;
<span style="color: #666666; font-style: italic;">// dodanie nowego elementu</span>
list.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;6&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> tab <span style="color: #339933;">:</span> tablica<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>tab <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wynikiem powyższych instrukcji jest:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">a <span style="color: #cc66cc;">2</span> <span style="color: #cc66cc;">3</span> <span style="color: #cc66cc;">4</span> <span style="color: #cc66cc;">5</span>
<span style="color: #003399;">UnsupportedOperationException</span></pre></div></div>

<p>Jak widać zmiana elementu listy została odwzorowana również w tablicy, natomiast dodanie elementu do tablicy zakończyło się wyjątkiem. Jest to spowodowane faktem, że lista faktycznie odwołuje się do tablicy, która zaalokowana jest na stercie i jej powiększenie, bez utworzenia nowej tablicy jest niemożliwe.</p>
]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2010/08/03/arrays-to-lists-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wyjątki w Javie</title>
		<link>http://tomaszmichalak.pl/index.php/2010/05/26/wyjatki-w-javie/</link>
		<comments>http://tomaszmichalak.pl/index.php/2010/05/26/wyjatki-w-javie/#comments</comments>
		<pubDate>Wed, 26 May 2010 15:47:47 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[exceptions]]></category>
		<category><![CDATA[finally]]></category>

		<guid isPermaLink="false">http://tomaszmichalak.pl/?p=47</guid>
		<description><![CDATA[Obsługa wyjątków w Javie]]></description>
			<content:encoded><![CDATA[<p>Często w Javie operuje się na strumieniach danych. Operacje na nich są analogiczne do poniższej metody:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> checkedException<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IOException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">FileNotFoundException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IOException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception 2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> e<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">IOException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exception 4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>W bloku finally strumienie są zamykane, lecz metoda close() może wyrzucić wyjątek IOException.  Wywołanie poniższej metody:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    checkedException<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>wypisze na konsoli:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #cc66cc;">1</span>
<span style="color: #cc66cc;">3</span>
<span style="color: #cc66cc;">4</span>
<span style="color: #003399;">Exception</span> <span style="color: #cc66cc;">4</span></pre></div></div>

<p>Można by przypuszczać, że wypisany zostanie &#8220;Exception 1&#8243;, jednak jako ostatni wyrzucony zostaje wyjątek w bloku finally i to on jest przekazywany dalej. Podobna sytuacja dotyczy zwracania wartości w bloku finally.</p>
]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2010/05/26/wyjatki-w-javie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collections vs Arrays w Javie</title>
		<link>http://tomaszmichalak.pl/index.php/2010/05/20/collections-vs-arrays-w-javie/</link>
		<comments>http://tomaszmichalak.pl/index.php/2010/05/20/collections-vs-arrays-w-javie/#comments</comments>
		<pubDate>Wed, 19 May 2010 22:34:35 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Arrays]]></category>
		<category><![CDATA[Collections]]></category>

		<guid isPermaLink="false">http://tomaszmichalak.pl/?p=14</guid>
		<description><![CDATA[Bezpieczeństwo typów dla kolekcji i tablic w Javie.

public class A &#123;
    public String getName&#40;&#41; &#123; return &#34;A&#34;; &#125;
&#160;
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Set&#60;B&#62; bSet = new LinkedHashSet&#60;B&#62;&#40;&#41;;
        Set&#60;A&#62; aSet = bSet; // THIS [...]]]></description>
			<content:encoded><![CDATA[<p>Bezpieczeństwo typów dla kolekcji i tablic w Javie.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> A <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;A&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Set<span style="color: #339933;">&lt;</span>B<span style="color: #339933;">&gt;</span> bSet <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> LinkedHashSet<span style="color: #339933;">&lt;</span>B<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Set<span style="color: #339933;">&lt;</span>A<span style="color: #339933;">&gt;</span> aSet <span style="color: #339933;">=</span> bSet<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// THIS WILL NOT COMPILE</span>
        aSet.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        B<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bTable <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> B<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        A<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> aTable <span style="color: #339933;">=</span> bTable<span style="color: #339933;">;</span>
        aTable<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> B<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        aTable<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//ArrayStoreException</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> B <span style="color: #000000; font-weight: bold;">extends</span> A <span style="color: #009900;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;B&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> C <span style="color: #000000; font-weight: bold;">extends</span> A <span style="color: #009900;">&#123;</span>
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;C&quot;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Załóżmy, że istnieje możliwość przypisania obiektu LinkedHashSet&lt;B&gt; do zmiennej referencyjnej Set&lt;A&gt;. Na nowej referencji można wywołać metodę aSet.add(new C()), czego skutkiem tego jest dodanie obiektu C (podtypu klasy A) do trzymanego na stercie obiektu LinkedHashSet&lt;B&gt;, co jest błędne. Należy jednocześnie pamiętać, że typy genetyczne są zapominane podczas kompilacji i w rzeczywistości w pamięci istnieje obiekt Map. W związku z powyższym przy próbie rzutowania obiektu LinkedHashSet&lt;B&gt; na Set&lt;A&gt; otrzymujemy błąd kompilacji.</p>
<p>Mając analogiczną sytuację dla tablic nie otrzymujemy żadnego powiadomienia o błędzie od kompilatora podczas rzutowania. Dopiero po uruchomieniu dostajemy wyjątek: ArrayStoreException. Jest on związany z próbą dodania do tablicy niezgodnego typu obiektu. Należy pamiętać, że w momencie tworzenia tablic zapamiętują one swój typ.</p>
<p>Z powyższego przykładu widać, że korzystanie z kolekcji jest bezpieczniejsze niż z tablic.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 348px; width: 1px; height: 1px; overflow: hidden;"><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm; text-decoration: none;" align="LEFT"><span style="font-family: Courier New,monospace;"><span style="font-size: x-small;"><strong><strong><a>ArrayStoreException</a></strong></strong></span></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2010/05/20/collections-vs-arrays-w-javie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GeeCON 2010</title>
		<link>http://tomaszmichalak.pl/index.php/2010/05/14/geecon-2010/</link>
		<comments>http://tomaszmichalak.pl/index.php/2010/05/14/geecon-2010/#comments</comments>
		<pubDate>Fri, 14 May 2010 21:08:25 +0000</pubDate>
		<dc:creator>Tomasz Michalak</dc:creator>
				<category><![CDATA[GeeCON 2010]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jdk7]]></category>

		<guid isPermaLink="false">http://decograf.home.pl/blog/?p=3</guid>
		<description><![CDATA[W dniach 13-14 maja odbyła się konferencja GeeCON 2010 poświęcona technologii JAVA.  Wykłady w których miałem okazję uczestniczyć:
13 maja

Object Teams: The Next Dimension of Modularity, Stephan Herrman
Easy to Use Highly Available Java Database  Access, Craig L Russell
The High Availability Non-Stop,  Fault-Tolerant Services Tutorial, Eugene Ciurana
Java in high-performance computing, Dawid Weiss
Gradle &#8211; A Better [...]]]></description>
			<content:encoded><![CDATA[<p>W dniach 13-14 maja odbyła się konferencja <a title="GeeCON" href="http://2010.geecon.org" target="_blank">GeeCON 2010</a> poświęcona technologii JAVA.  Wykłady w których miałem okazję uczestniczyć:</p>
<p><strong>13 maja</strong></p>
<ul>
<li><em>Object Teams: The Next Dimension of Modularity</em>, <strong>Stephan Herrman</strong></li>
<li><em><span>Easy to Use Highly Available Java Database  Access</span></em>, <strong>Craig L Russell</strong></li>
<li><span><em>The High Availability Non-Stop,  Fault-Tolerant Services Tutorial</em>, </span><strong>Eugene Ciurana</strong></li>
<li><span><em>Java in high-performance computing</em>, <strong>Dawid Weiss</strong></span></li>
<li><span><em>Gradle &#8211; A Better Way To Build</em>,<strong> </strong></span><strong>Hans Dockter</strong></li>
<li><span><em>Get &#8216;em before they get you</em>, </span><strong>Vaclav Pech</strong></li>
</ul>
<p><strong>14 maja</strong></p>
<ul>
<li><span><em>Let it crash: using Actors for  fault-tolerance, scalability and concurrency</em>,<strong> </strong></span><strong>Jonas Bonér</strong></li>
<li><span><em>JDK 7 Update</em>, </span><strong>Dalibor Topic</strong></li>
<li><span><em>Squeezing Java Performance: When you need a  little more</em>, </span><strong>Thomas Enebo</strong></li>
<li><span><em>Beyond Agile</em>, </span><strong>Andrea Provaglio</strong><span> </span></li>
<li><span><em>Apache Camel as a DSL for system  integration</em>, </span><strong>Roman Kalukiewicz</strong></li>
<li><span><em>Object Oriented for nonbelievers</em>, </span><strong>Bruno Bossola</strong></li>
<li><span><em>JSR-299 Context and Dependency Injection</em>, </span><strong>Mark Struberg</strong></li>
</ul>
<p>Najciekawsze wykłady poprowadzili: Eugene Ciurana,  Dawid Weiss, Hans Dockter, Dalibor Topic, Roman Kalukiewicz, Bruno Bossola. Konferencja zakończyła się powodzeniem, choć część tematów traktowana była zbyt ogólnie. Najbardziej interesującym tematem okazał się dla mnie Apache Camel, narzędzie pozwalające na integracje wielu serwisów, oparte na EIP (Enterprise Integration Patterns). Dzięki DSL (Domain Specific  Language) przykłady pokazane podczas prezentacji okazały się bardzo zwięzłe i proste do analizy.</p>
]]></content:encoded>
			<wfw:commentRss>http://tomaszmichalak.pl/index.php/2010/05/14/geecon-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

