<?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>Quand N@t communique... &#187; java</title>
	<atom:link href="http://www.richand.info/blog/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richand.info/blog</link>
	<description>Développement personnel, personal MBA et tout ce qui touche à la vie d'un consultant logiciel.</description>
	<lastBuildDate>Sat, 29 Oct 2011 11:07:07 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Sun certification et pièges java.</title>
		<link>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/</link>
		<comments>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 20:16:00 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[scjp]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=15</guid>
		<description><![CDATA[Voila un petit moment que mon blog est resté au point mort. L&#8217;explication à cela est du à : la fin de ma mission chez Groupama début juillet. le passage de la certification SCJP dans la foulée. Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas [...]]]></description>
			<content:encoded><![CDATA[<p>Voila un petit moment que mon blog est resté au point mort. L&#8217;explication à  cela est du à :</p>
<ul>
<li> la fin de ma mission chez Groupama début juillet.</li>
<li> le passage de la certification SCJP dans la foulée.</li>
</ul>
<p>Je vais faire le bilan de la certification SCJP dans mon prochain post donc je ne vais pas plus m&#8217;attarder sur celle-ci maintenant. Par contre le fait d&#8217;avoir travailler la certification m&#8217;a permis de découvrir certaines subtilités du langage java. Si vous trouvez la réponse tout de suite aux questions ci-dessous c&#8217;est bon, la certif SCJP est dans votre poche, sinon au boulot&#8230;</p>
<p><span id="more-15"></span></p>
<ol>
<h3>
<li><strong>Override &amp; Overload</strong></li>
</h3>
<p>Connaissez-vous bien le fonctionnement de la surcharge (Override) et de la redéfinition (Overload) ? Quel est donc le résultat de ce bout de code :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;un&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Chat &nbsp;<span class="kw2">extends</span> Animal<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Animal a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;deux&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> <span class="kw4">void</span> mange<span class="br0">&#40;</span>Chat a<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;trois&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Animal animal = <span class="kw2">new</span> Chat<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; animal.<span class="me1">mange</span><span class="br0">&#40;</span>animal<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Interface</strong></li>
</h3>
<p>Ce bout de code est plus que trivial. Il n&#8217;y a aucun problème naturellement&#8230;</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">interface</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> MyClass <span class="kw2">implements</span> MyInterface<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw4">void</span> myMethod<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>Constructeurs</strong></li>
</h3>
<p>Toujours trivial, toujours sans problème ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Constructeur <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">public</span> Constructeur<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Const2 <span class="kw2">extends</span> Constructeur<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw2">public</span> Const2<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a> s<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>
<li><strong>float</strong></li>
</h3>
<p>Enrobé dans 10 lignes de codes, ce code bidon peut se révéler très piégeur :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">float</span> f = <span class="nu0">1</span>/<span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Mon QI : &quot;</span>+ f*<span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>
<li><strong>Autoboxing et widening</strong></li>
</h3>
<p>Tout s&#8217;explique, même ceci. Comment justifierez-vous le choix de la méthode à appeler ?</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFloat+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">Float</span></a> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Float&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> coucou<span class="br0">&#40;</span><span class="kw4">double</span> f<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;double&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw4">float</span> f = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; coucou<span class="br0">&#40;</span>f<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Il y en a bien d&#8217;autres, mais celles-ci sont déjà représentatives de l&#8217;esprit de la certification.</ol>
<h2><strong>Réponses :</strong></h2>
<p>1) le résultat est &#8230; « deux » !<br />
Le principe est : Overload est définit à la compilation, Override à l&#8217;exécution. Donc lors de la compilation le compilateur ne sait uniquement que notre « animal » est un Animal mais sans en savoir plus. Donc suivant le principe il va éliminer du choix des méthodes la numéro trois car elle prend en paramètre un Chat. Lors de l&#8217;exécution par contre la JVM sait que notre variable est un Chat, donc elle va choisir la méthode numéro deux qui est définit dans la classe Chat. C&#8217;est aussi simple que cela.</p>
<p>2) Ca ne compile pas bien évidemment.<br />
Le problème vient du fait que les méthodes est variables dans une interface sont typées par défaut, même si vous ne le mettez pas. Le type par défaut d&#8217;une méthode est public. Donc quand on l&#8217;implémente en ne mettant rien on lui attribut le typage défault qui est plus restrictif que public est donc interdit&#8230;<br />
Merci à Eclipse de l&#8217;avoir fait pour nous depuis tant d&#8217;années.<br />
Le type des variables est par défaut lui public static final.3) Idem, ça compile pas.</p>
<p>3) Idem, ça compile pas.<br />
Le problème vient de l’appel au constructeur par défaut. Ce qu’on appelle un constructeur par défaut est un constructeur sans argument qui est automatiquement rajouté à la compilation … si la classe ne définit pas déjà un autre constructeur. Ici donc, aucun constructeur par défaut n’est inséré car on en définit un dans chaque classe.<br />
Le problème provient du fait que la première ligne de chaque constructeur doit contenir une référence vers un autre constructeur de la classe (this(…)) ou de la classe mère (super(…)). Si aucun appel de ce style n’est positionné sur la première ligne alors le compilateur ajoute tout seul : « super() ; »<br />
C’est ce qui se passe sur l’exemple ci-dessus et qui provoque donc une erreur de compilation car le constructeur sans paramètres n’existe pas.</p>
<p>4) Le résultat est évidemment 0.<br />
Un chiffre est considéré par le compilateur comme un int. Le résultat d’un int divisé par un int produit donc un int, le résultat est donc 0.</p>
<p>5) Le résultat est bien sûre « double ». On peut en effet utiliser en java la technique du « widening » qui permet ici de transformer notre float en double (no problem : un double peut contenir un float). On peut aussi depuis java 1.5 utiliser l’autoboxing, l’appel utilisant un « Float » est donc parfaitement valable également donc. L’autoboxing paraitrait plus logique, cependant c’est bien la méthode avec un double qui est appelé pour des besoins de compatibilité avec les versions de java antérieur. Too bad…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/08/sun-certification-et-pieges-java/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Eclipse tips : regex et liste des tâches</title>
		<link>http://www.richand.info/blog/2008/03/eclipse-tips-regex-et-liste-des-taches/</link>
		<comments>http://www.richand.info/blog/2008/03/eclipse-tips-regex-et-liste-des-taches/#comments</comments>
		<pubDate>Sun, 16 Mar 2008 11:16:53 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[task]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=13</guid>
		<description><![CDATA[Pour aujourd&#8217;hui quelques astuces Eclipse. Elles sont très simples, mais je les utilise vraiment quotidiennement et je me rend compte que pas mal de personnes ne les connaissent pas. La première est l&#8217;utilisation des regex dans l&#8217;éditeur « rechercher/remplacer ». Comment peut-on gagner beaucoup de temps et s&#8217;éviter un boulot à la con ? La [...]]]></description>
			<content:encoded><![CDATA[<p>Pour aujourd&#8217;hui quelques astuces Eclipse. Elles sont très simples, mais je les utilise vraiment quotidiennement et je me rend compte que pas mal de personnes ne les connaissent pas.<br />
<img src="http://www.picocontainer.org/script/images/eclipse-logo-white.jpg" style="width: 155px; height: 90px" height="90" width="155" /></p>
<ul>
<li> La première est l&#8217;utilisation des regex dans l&#8217;éditeur « rechercher/remplacer ». Comment peut-on gagner beaucoup de temps et s&#8217;éviter un boulot à la con ?</li>
<li>La seconde est l&#8217;utilisation des « tasks » (TODO, FIXME, &#8230;). Comment bien les utiliser, comment créer les siennes ?</li>
</ul>
<p><span id="more-13"></span></p>
<h2>Astuce 1 : gagnez du temps, utilisez les regex</h2>
<p>Il n&#8217;y a rien de plus chiant quand l&#8217;on code que de faire des séquences répétitives comme par exemple : (appui sur la touche &laquo;&nbsp;fin&nbsp;&raquo;, &laquo;&nbsp;;&nbsp;&raquo;, &laquo;&nbsp;flèche du bas&nbsp;&raquo; ) * 20 &#8230;</p>
<p>Plutôt que d&#8217;effectuer des tâches répétitives, je préfère bien souvent plutôt utiliser le temps que je passe d&#8217;habitude à effectuer ceci et ensuite à corriger les erreurs (qui s&#8217;insèrent souvent lorsque l&#8217;on fait ce genre de chose) par plutôt chercher une expression régulière qui effectuera ce boulôt.</p>
<p>Eclipse propose un support basique mais assez efficace des regex dans l&#8217;écran &laquo;&nbsp;Rechercher/Remplacer&nbsp;&raquo; (raccourci ctr+F). Pour celà, il suffit de cliquer sur la checkbox &laquo;&nbsp;Regular Expression&nbsp;&raquo;.</p>
<p><img src="/blog/wp-includes/images/EclipseTips/Replace1.jpg" /></p>
<p>La syntaxe est identique aux expressions régulières java : &laquo;&nbsp;.&nbsp;&raquo; pour tout caractère, &laquo;&nbsp;*&nbsp;&raquo; pour répéter 0 ou n fois, &laquo;&nbsp;()&nbsp;&raquo; pour capturer un groupe, &laquo;&nbsp;[\w] pour récupérer uniquement les caractères de mots, etc&#8230;</p>
<p>Pour récupérer les groupes que l&#8217;on a capturé, on utilise dans la partie &laquo;&nbsp;replace with&nbsp;&raquo; les expressions $1 pour le premier groupe, $2 pour le suivant, etc&#8230;</p>
<p><u>Un petit exemple bateau :</u></p>
<p>A partir de l&#8217;exemple ci dessus, imaginez que l&#8217;on veuille vérifier que toutes les variables de classes ne soient pas nulles.</p>
<p>On copie colle la définition des variables dans notre méthode (voir image1).</p>
<p>On recherche l&#8217;expression : &laquo;&nbsp;Private String ([\w]*) = &laquo;&nbsp;&nbsp;&raquo;;&nbsp;&raquo;</p>
<p>Que l&#8217;on remplace par exemple par : &laquo;&nbsp;if($1 != null &amp;&amp; !($1).equals(&laquo;&nbsp;&nbsp;&raquo;)){}</p>
<p>Ce qui produit comme résultat :</p>
<p><img src="/blog/wp-includes/images/EclipseTips/Replace2.jpg" style="width: 433px; height: 218px" height="218" width="433" /></p>
<p>Marvellous!</p>
<h2>Astuce 2 : n&#8217;oubliez rien, utilisez les tasks</h2>
<p>Je suis un fan des TODO/FIXME. C&#8217;est à dire que plutôt que d&#8217;écrire sur trois milles post-it les choses restant à faire, ou à corriger ou bien d&#8217;utiliser l&#8217;éternel &laquo;&nbsp;Nouveau document texte.txt&nbsp;&raquo; posé sur le bureau. Je préfère que tous ces éléments soient directement intégrés dans le code.</p>
<p>La vue des tasks se présente comme suit :</p>
<p><img src="/blog/wp-includes/images/EclipseTips/TasksList.jpg" /></p>
<p>On remarque tout de suite que l&#8217;avantage est que les tâches sont localisés à l&#8217;endroit ou elle doivent être. Un clic et on s&#8217;y rend. De plus, elle sont priorisable (high, normal ou low).</p>
<p>On peut de plus créer ses propres tâches personnalisées. Pour cela, se rendre dans les préférences -&gt; Java -&gt; Compiler -&gt; tasks tags :</p>
<p><img src="/blog/wp-includes/images/EclipseTips/AddTask.jpg" /></p>
<p>Le seul inconvénient, est que l&#8217;on sera le seul dans l&#8217;équipe à  les voir si les autres ne rajoutent pas ces mêmes tâches. Dans l&#8217;exemple, j&#8217;ai rajouté une tâche NAT avec une priorité haute. J&#8217;ai aussi pour habitude de descendre la tâche XXX en priorité faible.</p>
<p>Un autre truc cool avec les tâches est la gestion facile des filtres. Ces filtres ressemblent pas mal à ceux de la vue &laquo;&nbsp;Errors&nbsp;&raquo; :</p>
<p><img src="/blog/wp-includes/images/EclipseTips/FilterTasks.jpg" /></p>
<p>Ce qui est intéressant est de placer le filtre sur uniquement la classe ouverte lorsque l&#8217;on code (radio &laquo;&nbsp;On selected Element Only&nbsp;&raquo;) et éventuellement de filter sur les priorités. Quand on veux ensuite faire du refactoring global on enlève ces filtres, pratique!</p>
<h2>Bonus :</h2>
<p>En petit bonus aujourd&#8217;hui, je vous propose cet article que j&#8217;ai découvert hier, présentant <a href="http://java.dzone.com/news/effective-eclipse-fix-it-quick" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.dzone.com');">diverses astuces Eclipse</a>.</p>
<p>Une astuce utile à laquelle je n&#8217;avais pas réfléchi et de remplacer dans les templates la génération du try/catch  pour insérer dans le catch :</p>
<p><em>   logger.severe(&laquo;&nbsp;Exception caught: &nbsp;&raquo; + ${exception_var});  </em></p>
<p>Tout bête, mais pratique.</p>
<p>C&#8217;est tout pour aujourd&#8217;hui. En espérant vous avoir fait gagner 5 minutes sur votre prochaine journée <img src='http://www.richand.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/03/eclipse-tips-regex-et-liste-des-taches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fouillons un peu dans les Apache commons</title>
		<link>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/</link>
		<comments>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/#comments</comments>
		<pubDate>Wed, 12 Mar 2008 22:32:20 +0000</pubDate>
		<dc:creator>Nathaniel Richand</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[commons]]></category>

		<guid isPermaLink="false">http://www.richand.info/blog/?p=12</guid>
		<description><![CDATA[Nous utilisons très souvent les librairies commons d&#8217;Apache pour diverses choses, notamment pour le logging (commons logging), les connexions diverses et variées et urls (commons net), envoyer des fichiers en J2EE (commons FileUpload), envoyer des mails (commons email), et bien d&#8217;autres encore&#8230; Je n&#8217;utilise que certaines de ces librairies par habitude, mais je me rend [...]]]></description>
			<content:encoded><![CDATA[<p>Nous utilisons très souvent les <a href="http://commons.apache.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">librairies commons d&#8217;Apache</a> pour diverses choses, notamment pour le logging (commons logging), les connexions diverses et variées et urls (commons net), envoyer des fichiers en J2EE (commons FileUpload), envoyer des mails (commons email), et bien d&#8217;autres encore&#8230;</p>
<p>Je n&#8217;utilise que certaines de ces librairies par habitude, mais je me rend compte de plus en plus souvent que cela vaut le coup d&#8217;aller fréquemment y faire un saut pour éviter de réinventer la roue à chaque fois&#8230;</p>
<p>Ce coup ci je viens de retomber sur l&#8217;API <a href="http://commons.apache.org/lang/" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">commons lang</a> qui vise à étoffer le comportement de java.lang. Elle contient quantité de classes utilitaires qui peuvent être utilisées sur énormément de projet, d&#8217;ailleurs je pense que beaucoup de projets réécrivent en partie ces classes (vécu)&#8230;</p>
<p>Voici un petit tour rapide de ce que j&#8217;ai découvert d&#8217;intéressant :</p>
<ul>
<li> La classe <a href="http://commons.apache.org/lang/api/index.html?org/apache/commons/lang/StringUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>StringUtils </em></a>avec notamment la méthode<em> IsEmpty()</em> qui permet de remplacer <em>monString != null &amp;&amp; !(&laquo;&nbsp;&nbsp;&raquo;).equals(monString)</em></li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/builder/HashCodeBuilder.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>HashCodeBuilder </em></a>qui permet de coder un bon hashCode sans avoir à ressortir à chaque fois <em><u>java efficace</u></em> de Joshua Blosch (que je recommande)</li>
<li><em><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/exception/ExceptionUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');">ExceptionsUtils</a>.getStackTrace(e) </em>qui permet d&#8217;écrire la stackTrace dans une log par exemple ce que ne permet pas e.printStackTrace()</li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/time/DateUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>DateUtils</em> </a>qui contient des méthodes tels : <em>addYear(), addMonth(), addMinute(), &#8230;</em></li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/builder/EqualsBuilder.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>EqualsBuilder </em></a>pour aider à redéfinir la méthode equals</li>
<li><a href="http://commons.apache.org/lang/api/org/apache/commons/lang/math/NumberUtils.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/commons.apache.org');"><em>NumberUtils </em></a>avec par exemple <em>toInt(str), toFloat(str), &#8230;</em></li>
<li><em>&#8230;</em></li>
</ul>
<p>Mon conseil du jour est donc : gagnons du temps et refouillons un peu dans les commons <img src='http://www.richand.info/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.richand.info/blog/2008/03/fouillons-un-peu-dans-les-apache-commons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

