{"id":191,"date":"2004-11-05T12:50:00","date_gmt":"2004-11-05T19:50:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=191"},"modified":"2004-11-05T12:50:00","modified_gmt":"2004-11-05T19:50:00","slug":"opinion-de-libro-effective-java-de-joshua-bloch","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2004\/11\/05\/opinion-de-libro-effective-java-de-joshua-bloch\/","title":{"rendered":"Opini\u00f3n de libro: Effective Java, de Joshua Bloch"},"content":{"rendered":"<p><a href=\"http:\/\/java.sun.com\/docs\/books\/effective\/\"><img decoding=\"async\" src=\"http:\/\/java.sun.com\/docs\/books\/images\/effective.jpg\" \/><\/a><\/p>\n<p>Hay libros buenos y hay libros excelentes. &#8220;Effective Java&#8221; es uno de esos pocos libros que simplemente uno hubiera querido leer al principio de la carrera, cuando estaba empezando a programar. El libro es conciso, con ejemplos pr\u00e1cticos y sobre todo con explicaci\u00f3n de t\u00e9cnicas avanzadas de programaci\u00f3n que se espera un desarrollador profesional tenga a la mano.<\/p>\n<p>Por ejemplo, yo nunca hab\u00eda tenido la necesidad de &#8220;<span style=\"font-style: italic;\">opacar<\/span>&#8221; los m\u00e9todos &#8220;<span style=\"font-style: italic;\">equals<\/span>&#8221; o &#8220;<span style=\"font-style: italic;\">hashCode<\/span>&#8221; para hacer comparaciones profundas, pero el autor lo explica muy bien (por ejemplo, no habia visto a nadie en ning\u00fan libro proponer un m\u00e9todo simple para implementar hashCode). La explicaci\u00f3n de la interfaz &#8220;comparable&#8221; es muy clara y \u00fatil tambi\u00e9n. El siguiente ejemplo (un poco largo, lo s\u00e9) muestra como hacer todo lo anterior en una clase de Java trivial:<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">import<\/span> java.util.HashMap;\n<br \/><span class=\"gutter\">   2:<\/span>\n<br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">very<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">basic<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">class<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">just<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">test<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">proper<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">methods<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">equal<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">and<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">hasCode<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">overriding<\/span><span class=\"syntax3\">.<\/span>\n<br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">code<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">distributed<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">under<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GNU<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">GPL<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Licence<\/span><span class=\"syntax3\">.<\/span>\n<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jos\u00e9<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Vicente<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">N\u00fa\u00f1ez<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Zuleta<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">josevnz@users<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">sourceforge<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">net<\/span><span class=\"syntax3\">)<\/span>\n<br \/><span class=\"gutter\">   7:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">11<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">04<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2004<\/span>\n<br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@since<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span>\n<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> DataContainer <span class=\"syntax8\">implements<\/span> Comparable <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  11:<\/span>\n<br \/><span class=\"gutter\">  12:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">float<\/span> salary;\n<br \/><span class=\"gutter\">  13:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">double<\/span> savings;\n<br \/><span class=\"gutter\">  14:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">int<\/span> age;\n<br \/><span class=\"gutterH\">  15:<\/span>        <span class=\"syntax8\">private<\/span> String fullname;\n<br \/><span class=\"gutter\">  16:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">boolean<\/span> married;\n<br \/><span class=\"gutter\">  17:<\/span>        <span class=\"syntax8\">private<\/span> String [] brothers;\n<br \/><span class=\"gutter\">  18:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax10\">boolean<\/span> isValid;\n<br \/><span class=\"gutter\">  19:<\/span>       \n<br \/><span class=\"gutterH\">  20:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  21:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Parametric<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">constructor<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">It<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">only<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">provides<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">basic<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">validations<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">nothing<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">fancy<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">here<\/span>\n<br \/><span class=\"gutter\">  22:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">salary<\/span>\n<br \/><span class=\"gutter\">  23:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">savings<\/span>\n<br \/><span class=\"gutter\">  24:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">age<\/span>\n<br \/><span class=\"gutterH\">  25:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">fullname<\/span>\n<br \/><span class=\"gutter\">  26:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">married<\/span>\n<br \/><span class=\"gutter\">  27:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">brothers<\/span>\n<br \/><span class=\"gutter\">  28:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">IllegalArgumentException<\/span>\n<br \/><span class=\"gutter\">  29:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">NullPointerException<\/span>\n<br \/><span class=\"gutterH\">  30:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\">  31:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax10\">float<\/span> salary, <span class=\"syntax10\">double<\/span> savings, <span class=\"syntax10\">int<\/span> age, String fullname, <span class=\"syntax10\">boolean<\/span> married, String [] brothers) <span class=\"syntax8\">throws<\/span> IllegalArgumentException, NullPointerException <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  32:<\/span>               \n<br \/><span class=\"gutter\">  33:<\/span>                <span class=\"syntax8\">if<\/span> (salary <span class=\"syntax18\">&lt;<\/span> <span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  34:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalArgumentException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">The<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">salary<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">cannot<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">be<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">negative<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\">  35:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  36:<\/span>                <span class=\"syntax8\">if<\/span> (savings <span class=\"syntax18\">&lt;<\/span> <span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  37:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalArgumentException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">The<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">savings<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">cannot<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">be<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">negative<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  38:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  39:<\/span>                <span class=\"syntax8\">if<\/span> (age <span class=\"syntax18\">&lt;<\/span> <span class=\"syntax5\">1<\/span> <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span> age <span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">100<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  40:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalArgumentException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Age<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">must<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">be<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">between<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">[1-100]<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  41:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  42:<\/span>                <span class=\"syntax8\">if<\/span> (fullname <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  43:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">NullPointerException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">provide<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">full<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">name<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  44:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  45:<\/span>                <span class=\"syntax8\">if<\/span> (brothers <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  46:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">NullPointerException<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">provide<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">information<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">about<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">your<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">brothers<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">name<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">(if<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">any)<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  47:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  48:<\/span>                <span class=\"syntax14\">this<\/span>.salary <span class=\"syntax18\">=<\/span> salary;\n<br \/><span class=\"gutter\">  49:<\/span>                <span class=\"syntax14\">this<\/span>.savings <span class=\"syntax18\">=<\/span> savings;\n<br \/><span class=\"gutterH\">  50:<\/span>                <span class=\"syntax14\">this<\/span>.age <span class=\"syntax18\">=<\/span> age;\n<br \/><span class=\"gutter\">  51:<\/span>                <span class=\"syntax14\">this<\/span>.fullname <span class=\"syntax18\">=<\/span> fullname;\n<br \/><span class=\"gutter\">  52:<\/span>                <span class=\"syntax14\">this<\/span>.married <span class=\"syntax18\">=<\/span> married;\n<br \/><span class=\"gutter\">  53:<\/span>                <span class=\"syntax14\">this<\/span>.brothers <span class=\"syntax18\">=<\/span> brothers;\n<br \/><span class=\"gutter\">  54:<\/span>                <span class=\"syntax14\">this<\/span>.isValid <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">true<\/span>;\n<br \/><span class=\"gutterH\">  55:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  56:<\/span>       \n<br \/><span class=\"gutter\">  57:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  58:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Calling<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">ensures<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">that<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">some<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">memory<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">release<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Any<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">other<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">call<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">after<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">this<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">one<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">result<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">in<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">an<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">error<\/span>\n<br \/><span class=\"gutter\">  59:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutterH\">  60:<\/span>         <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">destroy<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  61:<\/span>                 <span class=\"syntax8\">if<\/span> (isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  62:<\/span>                         fullname <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  63:<\/span>                         <span class=\"syntax8\">if<\/span> (brothers <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  64:<\/span>                                 <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> idx <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; idx <span class=\"syntax18\">&lt;<\/span> brothers.length; idx<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  65:<\/span>                                         brothers[idx] <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  66:<\/span>                                 <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  67:<\/span>                         <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  68:<\/span>                         isValid <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">false<\/span>;\n<br \/><span class=\"gutter\">  69:<\/span>                 <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  70:<\/span>         <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  71:<\/span>        \n<br \/><span class=\"gutter\">  72:<\/span>         <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  73:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Last<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">chance<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">release<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">resources<\/span>\n<br \/><span class=\"gutter\">  74:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutterH\">  75:<\/span>         <span class=\"syntax8\">protected<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">finalize<\/span>() <span class=\"syntax8\">throws<\/span> Throwable <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  76:<\/span>                 <span class=\"syntax6\">destroy<\/span>();\n<br \/><span class=\"gutter\">  77:<\/span>                 <span class=\"syntax14\">super<\/span>.<span class=\"syntax6\">finalize<\/span>();\n<br \/><span class=\"gutter\">  78:<\/span>         <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  79:<\/span>       \n<br \/><span class=\"gutterH\">  80:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  81:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">salary<\/span>\n<br \/><span class=\"gutter\">  82:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">float<\/span>\n<br \/><span class=\"gutter\">  83:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\">  84:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">float<\/span> <span class=\"syntax6\">getSalary<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  85:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  86:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\">  87:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  88:<\/span>                <span class=\"syntax8\">return<\/span> salary\n<br \/><span class=\"gutter\">  89:<\/span>        ;<span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  90:<\/span>       \n<br \/><span class=\"gutter\">  91:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  92:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">savings<\/span>\n<br \/><span class=\"gutter\">  93:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">double<\/span>\n<br \/><span class=\"gutter\">  94:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutterH\">  95:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">double<\/span> <span class=\"syntax6\">getSavings<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  96:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  97:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\">  98:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  99:<\/span>                <span class=\"syntax8\">return<\/span> savings;\n<br \/><span class=\"gutterH\"> 100:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 101:<\/span>       \n<br \/><span class=\"gutter\"> 102:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 103:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">age<\/span>\n<br \/><span class=\"gutter\"> 104:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">int<\/span>\n<br \/><span class=\"gutterH\"> 105:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 106:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">int<\/span> <span class=\"syntax6\">getAge<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 107:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 108:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 109:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\"> 110:<\/span>                <span class=\"syntax8\">return<\/span> age;\n<br \/><span class=\"gutter\"> 111:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 112:<\/span>       \n<br \/><span class=\"gutter\"> 113:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 114:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">full<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">name<\/span>\n<br \/><span class=\"gutterH\"> 115:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">String<\/span>\n<br \/><span class=\"gutter\"> 116:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 117:<\/span>        <span class=\"syntax8\">public<\/span> String <span class=\"syntax6\">getFullname<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 118:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 119:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutterH\"> 120:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 121:<\/span>                <span class=\"syntax8\">return<\/span> fullname;\n<br \/><span class=\"gutter\"> 122:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 123:<\/span>       \n<br \/><span class=\"gutter\"> 124:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutterH\"> 125:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">It<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">married<\/span>\n<br \/><span class=\"gutter\"> 126:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">boolean<\/span>\n<br \/><span class=\"gutter\"> 127:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 128:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">boolean<\/span> <span class=\"syntax6\">getMarried<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 129:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 130:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 131:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 132:<\/span>                <span class=\"syntax8\">return<\/span> married;\n<br \/><span class=\"gutter\"> 133:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 134:<\/span>       \n<br \/><span class=\"gutterH\"> 135:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 136:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">brother<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">names<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">any<\/span><span class=\"syntax3\">)<\/span>\n<br \/><span class=\"gutter\"> 137:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">String<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">[<\/span><span class=\"syntax3\">]<\/span>\n<br \/><span class=\"gutter\"> 138:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 139:<\/span>        <span class=\"syntax8\">public<\/span> String []  <span class=\"syntax6\">getBrothers<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 140:<\/span>                                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 141:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 142:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 143:<\/span>                String [] brotherCopy <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> String[brothers.length];\n<br \/><span class=\"gutter\"> 144:<\/span>                System.<span class=\"syntax6\">arraycopy<\/span>(brothers, <span class=\"syntax5\">0<\/span>, brotherCopy, <span class=\"syntax5\">0<\/span>, brotherCopy.length);\n<br \/><span class=\"gutterH\"> 145:<\/span>                <span class=\"syntax8\">return<\/span> brotherCopy;\n<br \/><span class=\"gutter\"> 146:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 147:<\/span>       \n<br \/><span class=\"gutter\"> 148:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 149:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Check<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">if<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">two<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">objects<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">equal<\/span>\n<br \/><span class=\"gutterH\"> 150:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">obj<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">The<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">object<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">compare<\/span>\n<br \/><span class=\"gutter\"> 151:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">boolean<\/span>\n<br \/><span class=\"gutter\"> 152:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@since<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span>\n<br \/><span class=\"gutter\"> 153:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 154:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">boolean<\/span> <span class=\"syntax6\">equals<\/span>(Object obj) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 155:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 156:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 157:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 158:<\/span>                <span class=\"syntax10\">boolean<\/span> status <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">false<\/span>;\n<br \/><span class=\"gutter\"> 159:<\/span>                <span class=\"syntax8\">if<\/span> (obj <span class=\"syntax8\">instanceof<\/span> DataContainer) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 160:<\/span>                        DataContainer cont <span class=\"syntax18\">=<\/span> (DataContainer) obj;\n<br \/><span class=\"gutter\"> 161:<\/span>                        <span class=\"syntax8\">if<\/span> (\n<br \/><span class=\"gutter\"> 162:<\/span>                                salary <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getSalary<\/span>() <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/><span class=\"gutter\"> 163:<\/span>                                savings <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getSavings<\/span>() <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/><span class=\"gutter\"> 164:<\/span>                                age <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getAge<\/span>() <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/><span class=\"gutterH\"> 165:<\/span>                                married <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getMarried<\/span>() <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/><span class=\"gutter\"> 166:<\/span>                                (fullname <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>? cont.<span class=\"syntax6\">getFullname<\/span>() <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>: fullname.<span class=\"syntax6\">equals<\/span>(cont.<span class=\"syntax6\">getFullname<\/span>())) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/><span class=\"gutter\"> 167:<\/span>                                (brothers <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>? cont.<span class=\"syntax6\">getBrothers<\/span>() <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>: brothers.length <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getBrothers<\/span>().length)\n<br \/><span class=\"gutter\"> 168:<\/span>                                ) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 169:<\/span>                                        String [] brothers <span class=\"syntax18\">=<\/span> cont.<span class=\"syntax6\">getBrothers<\/span>();\n<br \/><span class=\"gutterH\"> 170:<\/span>                                        <span class=\"syntax10\">int<\/span> idx <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;\n<br \/><span class=\"gutter\"> 171:<\/span>                                        <span class=\"syntax8\">for<\/span> (idx <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; idx <span class=\"syntax18\">&lt;<\/span> brothers.length; idx<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 172:<\/span>                                                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> <span class=\"syntax14\">this<\/span>.brothers[idx].<span class=\"syntax6\">equals<\/span>(brothers[idx])) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 173:<\/span>                                                        <span class=\"syntax8\">break<\/span>;\n<br \/><span class=\"gutter\"> 174:<\/span>                                                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\"> 175:<\/span>                                        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 176:<\/span>                                        <span class=\"syntax8\">if<\/span> (idx <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> brothers.length) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 177:<\/span>                                                status <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">true<\/span>;\n<br \/><span class=\"gutter\"> 178:<\/span>                                        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 179:<\/span>                        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\"> 180:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 181:<\/span>                <span class=\"syntax8\">return<\/span> status;\n<br \/><span class=\"gutter\"> 182:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 183:<\/span>       \n<br \/><span class=\"gutter\"> 184:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutterH\"> 185:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Generate<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">hashCode<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">object<\/span>\n<br \/><span class=\"gutter\"> 186:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">int<\/span>\n<br \/><span class=\"gutter\"> 187:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@since<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span>\n<br \/><span class=\"gutter\"> 188:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 189:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">int<\/span> <span class=\"syntax6\">hashCode<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 190:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 191:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 192:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 193:<\/span>                <span class=\"syntax10\">int<\/span> result <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">17<\/span>;\n<br \/><span class=\"gutter\"> 194:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> ((<span class=\"syntax10\">int<\/span>)(Double.<span class=\"syntax6\">doubleToLongBits<\/span>(savings)<span class=\"syntax18\">^<\/span>(Double.<span class=\"syntax6\">doubleToLongBits<\/span>(savings) <span class=\"syntax18\">&gt;<\/span><span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">32<\/span>)));\n<br \/><span class=\"gutterH\"> 195:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> Float.<span class=\"syntax6\">floatToIntBits<\/span>(salary);\n<br \/><span class=\"gutter\"> 196:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> age;\n<br \/><span class=\"gutter\"> 197:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> fullname <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>? <span class=\"syntax5\">0<\/span>: fullname.<span class=\"syntax6\">hashCode<\/span>();\n<br \/><span class=\"gutter\"> 198:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> (married? <span class=\"syntax5\">0<\/span>: <span class=\"syntax5\">1<\/span>);\n<br \/><span class=\"gutter\"> 199:<\/span>                result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> (isValid? <span class=\"syntax5\">0<\/span>: <span class=\"syntax5\">1<\/span>);\n<br \/><span class=\"gutterH\"> 200:<\/span>                <span class=\"syntax8\">if<\/span> (brothers <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 201:<\/span>                        <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> idx <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; idx <span class=\"syntax18\">&lt;<\/span> brothers.length; idx<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 202:<\/span>                                <span class=\"syntax8\">if<\/span> (brothers[idx] <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 203:<\/span>                                        result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> <span class=\"syntax5\">0<\/span>;\n<br \/><span class=\"gutter\"> 204:<\/span>                                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">else<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\"> 205:<\/span>                                        result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> brothers[idx].<span class=\"syntax6\">hashCode<\/span>();\n<br \/><span class=\"gutter\"> 206:<\/span>                                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 207:<\/span>                        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 208:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">else<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 209:<\/span>                        result <span class=\"syntax18\">=<\/span> result <span class=\"syntax18\">*<\/span> <span class=\"syntax5\">37<\/span> <span class=\"syntax18\">+<\/span> <span class=\"syntax5\">0<\/span>;\n<br \/><span class=\"gutterH\"> 210:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 211:<\/span>                <span class=\"syntax8\">return<\/span> result;\n<br \/><span class=\"gutter\"> 212:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 213:<\/span>       \n<br \/><span class=\"gutter\"> 214:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutterH\"> 215:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">method<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">called<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">command<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">line<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">execution<\/span>\n<br \/><span class=\"gutter\"> 216:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span>\n<br \/><span class=\"gutter\"> 217:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Exception<\/span>\n<br \/><span class=\"gutter\"> 218:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@since<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span>\n<br \/><span class=\"gutter\"> 219:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutterH\"> 220:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">void<\/span> main (String [] args) <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 221:<\/span>                String [] bro <span class=\"syntax18\">=<\/span> <span class=\"syntax18\">{<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Curly<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Larry<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Moe<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax18\">}<\/span>;\n<br \/><span class=\"gutter\"> 222:<\/span>                DataContainer cont1 <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax5\">100<\/span>.<span class=\"syntax5\">0f<\/span>, <span class=\"syntax5\">1000<\/span>.<span class=\"syntax5\">56<\/span>, <span class=\"syntax5\">50<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Pedro<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax14\">true<\/span>, bro);\n<br \/><span class=\"gutter\"> 223:<\/span>                HashMap map <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">HashMap<\/span>();\n<br \/><span class=\"gutter\"> 224:<\/span>                map.<span class=\"syntax6\">put<\/span>(cont1, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Pedro<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\"> 225:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(cont1 <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">hash<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">code:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> cont1.<span class=\"syntax6\">hashCode<\/span>());\n<br \/><span class=\"gutter\"> 226:<\/span>                DataContainer cont2 <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax5\">100<\/span>.<span class=\"syntax5\">0f<\/span>, <span class=\"syntax5\">1000<\/span>.<span class=\"syntax5\">56<\/span>, <span class=\"syntax5\">50<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Pedro<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax14\">true<\/span>, bro);\n<br \/><span class=\"gutter\"> 227:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(cont2 <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">hash<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">code:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> cont1.<span class=\"syntax6\">hashCode<\/span>());\n<br \/><span class=\"gutter\"> 228:<\/span>                DataContainer cont3 <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax5\">400<\/span>.<span class=\"syntax5\">0f<\/span>, <span class=\"syntax5\">1500<\/span>.<span class=\"syntax5\">56<\/span>, <span class=\"syntax5\">28<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Jose<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax14\">false<\/span>, bro);\n<br \/><span class=\"gutter\"> 229:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(cont3 <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">hash<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">code:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> cont1.<span class=\"syntax6\">hashCode<\/span>());\n<br \/><span class=\"gutterH\"> 230:<\/span>                <span class=\"syntax8\">if<\/span> (cont1.<span class=\"syntax6\">equals<\/span>(cont2) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span> cont2.<span class=\"syntax6\">equals<\/span>(cont1)) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 231:<\/span>                        System.out.<span class=\"syntax6\">println<\/span>(cont1 <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">==<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> cont2);\n<br \/><span class=\"gutter\"> 232:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 233:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> cont3.<span class=\"syntax6\">equals<\/span>(cont2) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span> <span class=\"syntax18\">!<\/span> cont2.<span class=\"syntax6\">equals<\/span>(cont3)) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 234:<\/span>                        System.out.<span class=\"syntax6\">println<\/span>(cont3 <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">!=<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> cont2);\n<br \/><span class=\"gutterH\"> 235:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 236:<\/span>                <span class=\"syntax8\">if<\/span> (map.<span class=\"syntax6\">get<\/span>(<span class=\"syntax8\">new<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax5\">100<\/span>.<span class=\"syntax5\">0f<\/span>, <span class=\"syntax5\">1000<\/span>.<span class=\"syntax5\">56<\/span>, <span class=\"syntax5\">50<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Pedro<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax14\">true<\/span>, bro)) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 237:<\/span>                        System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Name<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> map.<span class=\"syntax6\">get<\/span>(<span class=\"syntax8\">new<\/span> <span class=\"syntax6\">DataContainer<\/span>(<span class=\"syntax5\">100<\/span>.<span class=\"syntax5\">0f<\/span>, <span class=\"syntax5\">1000<\/span>.<span class=\"syntax5\">56<\/span>, <span class=\"syntax5\">50<\/span>, <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Pedro<\/span><span class=\"syntax13\">\"<\/span>, <span class=\"syntax14\">true<\/span>, bro)));\n<br \/><span class=\"gutter\"> 238:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">else<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 239:<\/span>                        System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Name<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">not<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">found,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">error<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">in<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">hashCode?<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\"> 240:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 241:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 242:<\/span>       \n<br \/><span class=\"gutter\"> 243:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 244:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Clone<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">operator<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">not<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">supported<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Throw<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">an<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">exception<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">always<\/span><span class=\"syntax3\">.<\/span>\n<br \/><span class=\"gutterH\"> 245:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Object<\/span>\n<br \/><span class=\"gutter\"> 246:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CloneNotSupportedException<\/span><span class=\"syntax3\"> <\/span>\n<br \/><span class=\"gutter\"> 247:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 248:<\/span>        <span class=\"syntax8\">public<\/span> Object <span class=\"syntax6\">clone<\/span>() <span class=\"syntax8\">throws<\/span> CloneNotSupportedException <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 249:<\/span>                <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">CloneNotSupportedException<\/span>();\n<br \/><span class=\"gutterH\"> 250:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 251:<\/span>       \n<br \/><span class=\"gutter\"> 252:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 253:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">String<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">representation<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">object<\/span>\n<br \/><span class=\"gutter\"> 254:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@return<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">String<\/span>\n<br \/><span class=\"gutterH\"> 255:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 256:<\/span>         <span class=\"syntax8\">public<\/span> String <span class=\"syntax6\">toString<\/span>() <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 257:<\/span>                <span class=\"syntax8\">if<\/span> (<span class=\"syntax18\">!<\/span> isValid) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 258:<\/span>                        <span class=\"syntax8\">throw<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">IllegalStateException<\/span>();\n<br \/><span class=\"gutter\"> 259:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\"> 260:<\/span>                StringBuffer repr <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">StringBuffer<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">{<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 261:<\/span>                repr.<span class=\"syntax6\">append<\/span>(salary <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 262:<\/span>                repr.<span class=\"syntax6\">append<\/span>(savings <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 263:<\/span>                repr.<span class=\"syntax6\">append<\/span>(age <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 264:<\/span>                repr.<span class=\"syntax6\">append<\/span>(fullname <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\"> 265:<\/span>                repr.<span class=\"syntax6\">append<\/span>(married <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">[<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 266:<\/span>                <span class=\"syntax8\">for<\/span> (<span class=\"syntax10\">int<\/span> idx <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>; idx <span class=\"syntax18\">&lt;<\/span> brothers.length; idx<span class=\"syntax18\">+<\/span><span class=\"syntax18\">+<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 267:<\/span>                        repr.<span class=\"syntax6\">append<\/span>(brothers[idx]);\n<br \/><span class=\"gutter\"> 268:<\/span>                        <span class=\"syntax8\">if<\/span> (idx <span class=\"syntax18\">&lt;<\/span> brothers.length <span class=\"syntax18\">-<\/span><span class=\"syntax5\">1<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 269:<\/span>                                repr.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\"> 270:<\/span>                        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 271:<\/span>                <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 272:<\/span>                repr.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">],<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> isValid <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">}<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\"> 273:<\/span>                <span class=\"syntax8\">return<\/span> repr.<span class=\"syntax6\">toString<\/span>();\n<br \/><span class=\"gutter\"> 274:<\/span>        <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\"> 275:<\/span>       \n<br \/><span class=\"gutter\"> 276:<\/span>        <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\"> 277:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span>\n<br \/><span class=\"gutter\"> 278:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span>\n<br \/><span class=\"gutter\"> 279:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span>\n<br \/><span class=\"gutterH\"> 280:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\"> 281:<\/span>         <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">int<\/span> <span class=\"syntax6\">compareTo<\/span>(Object obj) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\"> 282:<\/span>                 <span class=\"syntax10\">int<\/span> status <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">0<\/span>;\n<br \/><span class=\"gutter\"> 283:<\/span>                \n<br \/><span class=\"gutter\"> 284:<\/span>                 <span class=\"syntax8\">return<\/span> status;\n<br \/><span class=\"gutterH\"> 285:<\/span>         <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\"> 286:<\/span>\n<br \/><span class=\"gutter\"> 287:<\/span><span class=\"syntax18\">}<\/span>\n<br \/><\/pre>\n<p>La salida de este programa ser\u00eda algo como esto:<\/p>\n<p><span style=\"font-size:85%;\"><span style=\"font-family:courier new;\">[josevnz@god tmp]$ <span style=\"font-weight: bold;\">java DataContainer<\/span><\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">{100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true}, hash code: -837126408<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">{100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true}, hash code: -837126408<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">{400.0, 1500.56, 28, Jose, false, [Curly, Larry, Moe], true}, hash code: -837126408<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">{100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true} == {100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true}<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">{400.0, 1500.56, 28, Jose, false, [Curly, Larry, Moe], true} != {100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true}<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">Name is: Pedro<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">[{400.0, 1500.56, 23, Andres, true, [Curly, Larry, Moe], true}, {400.0, 1500.56, 28, Jose, false, [Curly, Larry, Moe], true}, {100.0, 1000.56, 50, Pedro, true, [Curly, Larry, Moe], true}]<\/span><br \/>\n<br \/><span style=\"font-family:courier new;\">[josevnz@god tmp]$<\/span><\/span><\/p>\n<p><span style=\"font-size:100%;\">Aqui hay un enlace a<a href=\"http:\/\/www.artima.com\/intv\/bloch.html\"> una entrevista<\/a> con el autor, muy ilustrativa, la cual es cas\u00ed un resum\u00e9n de los planteamientos hechos en el libro. Si bien hay algunos t\u00f3picos en los que es un poco conservador (pudiera ser m\u00e1s pragm\u00e1tico) es definitivamente una muestra de como el buen dise\u00f1o puede ser incorporado a los programas sin sacrificar claridad.<\/span><\/p>\n<p><span style=\"font-size:100%;\">Si tiene el dinero, entonces le recomiendo que se compr\u00e9 este libro y que lo tenga como una referencia para programar mejor en Java. No se va a decepcionar.<\/span><br \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hay libros buenos y hay libros excelentes. &#8220;Effective Java&#8221; es uno de esos pocos libros que simplemente uno hubiera querido leer al principio de la carrera, cuando estaba empezando a programar. El libro es conciso, con ejemplos pr\u00e1cticos y sobre todo con explicaci\u00f3n de t\u00e9cnicas avanzadas de programaci\u00f3n que se espera un desarrollador profesional tenga <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2004\/11\/05\/opinion-de-libro-effective-java-de-joshua-bloch\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/191"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=191"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/191\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=191"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}