{"id":31,"date":"2014-05-26T12:06:23","date_gmt":"2014-05-26T12:06:23","guid":{"rendered":"http:\/\/vkrastev1blog.com\/?p=31"},"modified":"2014-05-26T15:36:27","modified_gmt":"2014-05-26T15:36:27","slug":"java-generics-explained-in-short-form-with-examples","status":"publish","type":"post","link":"https:\/\/vkrastev1blog.com\/2014\/05\/26\/java-generics-explained-in-short-form-with-examples\/","title":{"rendered":"Java sugas ir izskaidrotas \u012bs\u0101 form\u0101 ar piem\u0113riem"},"content":{"rendered":"<p>Lai ieg\u016btu papildinform\u0101ciju, l\u016bdzu, skatiet \u0161o FAQ:<\/p>\n<p><a href=\"http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1\" rel=\"nofollow\">http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1<\/a><\/p>\n<p>\u0160eit ir \u012bsum\u0101 da\u017ei svar\u012bgi punkti no \u0161\u012b FAQ.<\/p>\n<p>Piem\u0113rs (visp\u0101r\u012bga veida):<\/p>\n<blockquote><p><tt> klase Pair&lt;X,Y&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais X vispirms;<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais Y sekunde;<\/tt><tt> \u00a0 publiskais p\u0101ris(X a1, Y a2) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 pirmais = a1;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 otrais = a2;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 public X getFirst() { return first; }<\/tt><br \/>\n<tt> \u00a0 public Y getSecond() { return second; }<\/tt><br \/>\n<tt> \u00a0 public void setFirst(X arg)\u00a0 { first = arg; }<\/tt><br \/>\n<tt> \u00a0 public void setSecond(Y arg) { second = arg; }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Klase <tt> P\u0101ris<\/tt> ir divu veidu parametri <tt> X <\/tt> un <tt> Y<\/tt> .\u00a0 Tie tiek aizst\u0101ti ar tipa argumentiem, ja ir visp\u0101r\u012bgs veids <tt> P\u0101ris<\/tt> ir moment\u0101ni. Piem\u0113ram, deklar\u0101cij\u0101 <tt> P\u0101ris&lt;String, Datums&gt;<\/tt> tipa parametrs <tt> X<\/tt> tiek aizst\u0101ts ar tipa argumentu <tt> St\u012bga<\/tt> un <tt> Y<\/tt> tiek aizst\u0101ts ar\u00a0 <tt> Datums<\/tt> .<br \/>\nIdentifikatoru darb\u012bbas joma <tt> X <\/tt> un <tt> Y<\/tt> ir<b> <i> <\/i> <\/b> visa klases defin\u012bcija.\u00a0 \u0160aj\u0101 jom\u0101 divu veidu parametri <tt> X <\/tt> un <tt> Y<\/tt> tiek izmantoti k\u0101 tie veidi (ar da\u017eiem ierobe\u017eojumiem). Iepriek\u0161 min\u0113taj\u0101 piem\u0113r\u0101 tipa parametri tiek izmantoti k\u0101 instances meto\u017eu arguments un atgrie\u0161anas veids un gad\u012bjumu lauku veidi.<br \/>\nTipa parametrus var deklar\u0113t ar robe\u017e\u0101m. Robe\u017eas nodro\u0161ina piek\u013cuvi nezin\u0101ma tipa metod\u0113m, kuras apz\u012bm\u0113 tipa parametrs. M\u016bsu piem\u0113r\u0101 m\u0113s neizsaucam nevienas nezin\u0101mu veidu metodes <tt> X <\/tt> un <tt> Y<\/tt> . \u0160\u012b iemesla d\u0113\u013c abi tipa parametri ir neierobe\u017eoti.<\/p>\n<p>Piem\u0113rs (konkr\u0113ta tipa parametriem):<\/p>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> P\u0101ris&lt;String, Long&gt;<\/span> <\/b> p\u0101ris) {<\/tt><br \/>\n<tt> \u00a0 System.out.println(\"(\"+pair.getFirst()+\",\"+pair.getSecond()+\")\");<\/tt><br \/>\n<tt> }<\/tt><tt> <b> <span style=\"color:#000099;\"> P\u0101ris&lt;String, Long&gt;<\/span> <\/b> limits = jauns <b> <span style=\"color:#000099;\"> P\u0101ris&lt;String, Long&gt;<\/span> <\/b> (\"maksimums\", 1024L);<\/tt><br \/>\n<tt> printPair(limit);<\/tt><\/p><\/blockquote>\n<p>Piem\u0113rs (aizst\u0101j\u0113jz\u012bmes parametriz\u0113tam tipam):<\/p>\n<blockquote>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> Pair&lt;?,?&gt;<\/span> <\/b> p\u0101ris) {<\/tt><br \/>\n<tt> \u00a0 System.out.println(\"(\"+pair.getFirst()+\",\"+pair.getSecond()+\")\");<\/tt><br \/>\n<tt> }<\/tt><tt> <b> <span style=\"color:#000099;\"> Pair&lt;?,?&gt;<\/span> <\/b> limits = jauns <b> <span style=\"color:#000099;\"> P\u0101ris&lt;String, Long&gt;<\/span> <\/b> (\"maksimums\", 1024L);<\/tt><br \/>\n<tt> printPair(limit);<\/tt><\/p><\/blockquote>\n<\/blockquote>\n<p>Vis\u0101m visp\u0101r\u012bg\u0101 tipa instanc\u0113m ir viens un tas pats izpildlaika tipa att\u0113lojums, proti, neapstr\u0101d\u0101t\u0101 tipa att\u0113lojums. Piem\u0113ram, visp\u0101r\u0113ja veida instancijas <tt> Saraksts<\/tt> , piem\u0113ram, <tt> Saraksts&lt;Datums&gt;<\/tt> , <tt> Saraksts&lt;String&gt;<\/tt> , <tt> Saraksts&lt;Long&gt;<\/tt> uc ir da\u017e\u0101di statiskie tipi kompil\u0113\u0161anas laik\u0101, bet viens un tas pats dinamiskais tips <tt> Saraksts <\/tt> izpildlaik\u0101.<\/p>\n<p>Aktieris sast\u0101v no div\u0101m da\u013c\u0101m:<\/p>\n<ul>\n<li>statisk\u0101 tipa p\u0101rbaude, ko kompilators veic kompil\u0113\u0161anas laik\u0101 un<\/li>\n<li>dinamiska tipa p\u0101rbaude, ko izpildes laik\u0101 veic virtu\u0101l\u0101 ma\u0161\u012bna.<\/li>\n<\/ul>\n<p>Statisk\u0101 da\u013ca iz\u0161\u0137ir nej\u0113dz\u012bgus metienus, kas nevar izdoties, piem\u0113ram, cast no <tt> St\u012bga<\/tt> ka <tt> Datums<\/tt> vai no <tt> Saraksts&lt;String&gt;<\/tt> ka <tt> Saraksts&lt;Datums&gt;<\/tt> .<\/p>\n<p>Dinamisk\u0101 da\u013ca izmanto izpildlaika tipa inform\u0101ciju un izpildes laik\u0101 veic tipa p\u0101rbaudi.\u00a0 Tas paaugstina a <tt> ClassCastException<\/tt> ja objekta dinamiskais tips nav cast m\u0113r\u0137a tips (vai m\u0113r\u0137a tipa apak\u0161tips). Metienu piem\u0113ri ar dinamisko da\u013cu ir cast no <tt> Objekts<\/tt> ka <tt> St\u012bga<\/tt> vai no <tt> Objekts<\/tt> ka <tt> Saraksts&lt;String&gt;<\/tt> .\u00a0 Tie ir t\u0101 sauktie downcasts, s\u0101kot no supertipa l\u012bdz apak\u0161tipam.<\/p>\n<p>Konkr\u0113tu parametriz\u0113tu tipu piem\u0113ri ir <tt> Saraksts&lt;String&gt;<\/tt> , <tt> Karte&lt;String,Datums&gt;<\/tt> , bet ne <tt> List&lt;? pagarina Number&gt;<\/tt> vai <tt> Map&lt;String,?&gt;<\/tt> .<\/p>\n<p>Da\u017ereiz tiek sagaid\u012bts, ka a <tt> Saraksts&lt;Object&gt;<\/tt> b\u016btu supertips a <tt> Saraksts&lt;String&gt;<\/tt> , jo <tt> Objekts<\/tt> ir supertips <tt> St\u012bga<\/tt> .\u00a0 \u0160\u012bs cer\u012bbas izriet no fakta, ka mas\u012bviem past\u0101v \u0161\u0101da veida attiec\u012bbas:\u00a0 <tt> Objekts[]<\/tt> ir supertips <tt> virkne[]<\/tt> , jo <tt> Objekts<\/tt> ir supertips <tt> St\u012bga<\/tt> . (\u0160\u0101da veida attiec\u012bbas ir paz\u012bstamas k\u0101 <i> kovari\u0101cija<\/i> .) Komponentu tipu super-apak\u0161tipu attiec\u012bbas izv\u0113r\u0161as l\u012bdz atbilsto\u0161ajiem mas\u012bvu veidiem. \u0160\u0101da veida attiec\u012bbas nepast\u0101v visp\u0101r\u012bgu tipu instanc\u0113m. (Parametru veidi ir <i> n\u0113<\/i> kovariants.)<\/p>\n<p>Super-apak\u0161tipu attiec\u012bbu tr\u016bkumam starp viena un t\u0101 pa\u0161a visp\u0101r\u012bg\u0101 tipa instanc\u0113m ir da\u017e\u0101das sekas.\u00a0 \u0160eit ir piem\u0113rs.<\/p>\n<p>Piem\u0113rs:<\/p>\n<p><tt> void printAll(ArrayList&lt;Object&gt; c) {<\/tt><br \/>\n<tt> \u00a0 priek\u0161 (Objekts : c)\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 System.out.println(o);<\/tt><br \/>\n<tt> }<\/tt><tt> ArrayList&lt;String&gt; saraksts = new ArrayList&lt;String&gt;();<\/tt><br \/>\n<tt> ... aizpild\u012bt sarakstu ...<\/tt><br \/>\n<tt> druk\u0101tVisu(saraksts);\u00a0\u00a0 \/\/ k\u013c\u016bda<\/tt><\/p>\n<p>A <tt> ArrayList&lt;String&gt;<\/tt> objektu nevar nodot k\u0101 argumentu metodei, kas prasa a <tt> ArrayList&lt;Object&gt;<\/tt> jo abi veidi ir viena un t\u0101 pa\u0161a visp\u0101r\u012bg\u0101 tipa instancijas, bet priek\u0161 <i> da\u017e\u0101di<\/i> tipa argumentus, un \u0161\u012b iemesla d\u0113\u013c tie nav savietojami viens ar otru.<\/p>\n<p>Betona parametriz\u0113tie tipi ir visp\u0101r\u012bga tipa konkr\u0113tas instancijas.\u00a0 Tie ir gandr\u012bz l\u012bdz\u012bgi tipiem; ir tikai da\u017ei ierobe\u017eojumi.\u00a0 Tos NEVAR izmantot \u0161\u0101diem m\u0113r\u0137iem:<\/p>\n<ul>\n<li>mas\u012bvu izveido\u0161anai<\/li>\n<li>iz\u0146\u0113mumu apstr\u0101d\u0113<\/li>\n<li>klases burtiski<\/li>\n<li>in an <tt> instanceof<\/tt> izteiksme<\/li>\n<\/ul>\n<p>Mas\u012bvi, kuros ir elementi, kuru tips ir konkr\u0113ti parametriz\u0113ts tips, ir nelikum\u012bgi.<\/p>\n<p>Piem\u0113rs (neleg\u0101la mas\u012bva tipa):<\/p>\n<p><tt> static void test() {<\/tt><br \/>\n<tt> \u00a0 <b> <span style=\"color:#660000;\"> P\u0101ris&lt;Vesels skaitlis, Vesels skaitlis&gt;[]<\/span> <\/b> intPairArr = jauns <b> <span style=\"color:#660000;\"> P\u0101ris&lt;Vesels skaitlis, Vesels skaitlis&gt;[10]<\/span> <\/b> ; <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 addElements(intPairArr);\u00a0<\/tt><br \/>\n<tt> \u00a0 P\u0101ris&lt;Integer,Integer&gt; p\u0101ris = intPairArr[1];<\/tt><br \/>\n<tt> \u00a0 Vesels skaitlis i = p\u0101ris.getFirst();<\/tt><br \/>\n<tt> \u00a0 pair.setSecond(i);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> static Void addElements(<b> Objekts[]<\/b> objArr) {<\/tt><br \/>\n<tt> \u00a0 objArr[0] = jauns P\u0101ris&lt;Vesels skaitlis, Vesels skaitlis&gt;(0,0);<\/tt><br \/>\n<tt> \u00a0 objArr[1] = jauns p\u0101ris&lt;String,String&gt;(\"\",\"\");\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ vajadz\u0113tu neizdoties ar ArrayStoreException<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<p>Kompilators aizliedz izveidot mas\u012bvus, kuru komponenta tips ir konkr\u0113ts parametriz\u0113ts tips, piem\u0113ram <tt> P\u0101ris&lt;Integer,Integer&gt;<\/tt> m\u016bsu piem\u0113r\u0101.\u00a0 Iepriek\u0161\u0113j\u0101 ierakst\u0101 m\u0113s apspried\u0101m, k\u0101p\u0113c ir sapr\u0101t\u012bgi, ka kompilators kvalific\u0113 a<span style=\"color:#000000;\"> <tt> P\u0101ris&lt;Vesels skaitlis, Vesels skaitlis&gt;[]<\/tt> <\/span> k\u0101 nelikum\u012bgu.\u00a0 Galven\u0101 probl\u0113ma ir t\u0101, ka kompilatoram un izpildlaika sist\u0113mai ir j\u0101nodro\u0161ina, lai mas\u012bvs b\u016btu a <i> viendab\u012bgs<\/i> viena veida elementu sec\u012bba.\u00a0 Viena no veida p\u0101rbaud\u0113m, proti, mas\u012bva veikala p\u0101rbaude, ko veic virtu\u0101l\u0101 ma\u0161\u012bna izpildlaik\u0101, neizdodas atkl\u0101t sve\u0161a elementa aizskaro\u0161u ievieto\u0161anu. Piem\u0113r\u0101 otrais ievietojums <tt> addElements<\/tt> metodei vajadz\u0113tu neizdoties, jo vi\u0146i pievienoja virk\u0146u p\u0101ri integr\u0101lo v\u0113rt\u012bbu mas\u012bvam, ta\u010du t\u0101 neizdodas, k\u0101 paredz\u0113ts. Iemesli tika apspriesti iepriek\u0161\u0113j\u0101 ierakst\u0101.<\/p>\n<p>Ja m\u0113s nevaram izmantot mas\u012bvus, kas satur elementus, kuru tips ir konkr\u0113ts parametriz\u0113ts tips, ko m\u0113s izmantojam k\u0101 risin\u0101jumu?<\/p>\n<p>Apsv\u0113rsim 3 iesp\u0113jamos risin\u0101jumus:<\/p>\n<ul>\n<li>neapstr\u0101d\u0101tu veidu kl\u0101sts<\/li>\n<li>neierobe\u017eota aizst\u0101j\u0113jz\u012bmju parametriz\u0113ta tipa mas\u012bvs<\/li>\n<li>kolekcija mas\u012bva viet\u0101<\/li>\n<\/ul>\n<p>Lai gan betona parametru tipu mas\u012bvi ir nelikum\u012bgi, betona parametriz\u0113tu tipu kolekcijas ir at\u013cautas.<\/p>\n<p>Aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips ir visp\u0101r\u0113ja tipa instanc\u0113, kur vismaz viens tipa arguments ir aizst\u0101j\u0113jz\u012bme.\u00a0 Aizst\u0101j\u0113jz\u012bmju parametriz\u0113to tipu piem\u0113ri ir <tt> Kolekcija&lt;?&gt;<\/tt> , <tt> List&lt;? pagarina Number&gt;<\/tt> , <tt> Comparator&lt;? super String&gt;<\/tt> un <tt> Pair&lt;String,?&gt;<\/tt> . Aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips apz\u012bm\u0113 tipu saimi, kas ietver konkr\u0113tas visp\u0101r\u0113ja tipa instancijas.\u00a0 Izmantot\u0101s aizst\u0101j\u0113jz\u012bmes veids nosaka, kuri konkr\u0113tie parametriz\u0113tie veidi pieder saimei.\u00a0 Piem\u0113ram, aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips <tt> Kolekcija&lt;?&gt;<\/tt> apz\u012bm\u0113 visu instanti\u0101ciju saimi <tt> Kolekcija<\/tt> interfeiss neatkar\u012bgi no argumenta tipa.\u00a0 Aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips <tt> List&lt;? pagarina Number&gt;<\/tt> apz\u012bm\u0113 visu sarakstu tipu saimi, kur elementa tips ir apak\u0161tips\u00a0 <tt> Numurs<\/tt> .\u00a0 Aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips <tt> Comparator&lt;? super String&gt;<\/tt> ir visu instan\u010du saime <tt> Sal\u012bdzin\u0101t\u0101js<\/tt> saskarne tipa argumentu tipiem, kas ir supertipi <tt> St\u012bga.<\/tt><\/p>\n<p><strong><em>Aizst\u0101j\u0113jz\u012bmes parametriz\u0113tais tips nav tips parastaj\u0101 noz\u012bm\u0113 (at\u0161\u0137iras no neparametriz\u0113tas klases\/saskarnes vai neapstr\u0101d\u0101ta tipa).<\/em> <\/strong><\/p>\n<p>Rakst\u012b\u0161anai var izmantot aizst\u0101j\u0113jz\u012bmju parametriz\u0113tos tipus (piem\u0113ram, klases un saskarnes bez parametriem):<\/p>\n<ul>\n<li>k\u0101 argumentu un atgrie\u0161anas veidu metodes<\/li>\n<li>k\u0101 lauka vai viet\u0113j\u0101 atsauces main\u012bg\u0101 veids<\/li>\n<li>k\u0101 citu parametriz\u0113tu tipu mas\u012bva tipa argumenta komponenta tips<\/li>\n<li>k\u0101 m\u0113r\u0137a veids metienos<\/li>\n<\/ul>\n<p>Ne tikai veidi var b\u016bt visp\u0101r\u012bgi, bet ar\u012b metodes var b\u016bt visp\u0101r\u012bgas. Statisk\u0101m un nestatisk\u0101m metod\u0113m, k\u0101 ar\u012b konstruktoriem var b\u016bt tipa parametri. Form\u0101lo tipu parametru deklar\u0113\u0161anas sintakse ir l\u012bdz\u012bga visp\u0101r\u012bgo tipu sintaksei. Tipa parametra sada\u013ca ir norobe\u017eota ar le\u0146\u0137a iekav\u0101m un par\u0101d\u0101s pirms metodes atgrie\u0161anas veida. T\u0101 sintakse un noz\u012bme ir identiska visp\u0101r\u012bg\u0101 tipa tipa parametru sarakstam.<\/p>\n<p>\u0160eit ir sugas piem\u0113rs <tt> maks<\/tt> metode, kas apr\u0113\u0137ina liel\u0101ko v\u0113rt\u012bbu nezin\u0101ma veida elementu kolekcij\u0101 <tt> A<\/tt> .<\/p>\n<p>Piem\u0113rs (visp\u0101r\u0113jai metodei):<\/p>\n<blockquote><p><tt> klases kolekcijas {<\/tt><br \/>\n<tt> \u00a0 publiska statiska <b> <span style=\"color:#000099;\"> &lt;A pagarina Sal\u012bdzin\u0101ms&lt;A&gt;&gt; A<\/span> <\/b> max (Kolekcija&lt;<b> <span style=\"color:#000099;\"> A<\/span> <\/b> &gt; xs) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Iterators&lt;<b> <span style=\"color:#000099;\"> A<\/span> <\/b> &gt; xi = xs.iterator();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> A<\/span> <\/b> w = xi.next();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 while (xi.hasNext()) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> A<\/span> <\/b> x = xi.next();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 ja (w.sal\u012bdzin\u0101tTo(x) &lt; 0) w = x;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 atgriezties w;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p><\/blockquote>\n<p>The <tt> maks<\/tt> metodei ir viens tipa parametrs, nosaukts<tt> A<\/tt> .\u00a0 Tas ir vietas tur\u0113t\u0101js kolekcijas elementa tipam, kur\u0101 darbojas metode. Tipa parametram ir ierobe\u017eojums; tam ir j\u0101b\u016bt veidam, kas ir apak\u0161tips <tt> Sal\u012bdzin\u0101ms&lt;A&gt;<\/tt><\/p>\n<p>Piem\u0113rs (\u0161oreiz t\u0101 pa\u0161a visp\u0101r\u012bg\u0101 tipa <i> ar<\/i> robe\u017eas):<\/p>\n<blockquote><p><tt> publiska saskarne Sal\u012bdzin\u0101ms&lt;T&gt; {<\/tt><br \/>\n<tt> \u00a0 publisks int sal\u012bdzin\u0101tTo(T arg);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> publisk\u0101 klase TreeMap&lt;Key <b> <span style=\"color:#000066;\"> pagarina Sal\u012bdzin\u0101ms&lt;Key&gt;<\/span> <\/b> ,Data&gt;{<\/tt><br \/>\n<tt> \u00a0 priv\u0101t\u0101 statisk\u0101 klase Entry&lt;K,V&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 K tausti\u0146\u0161;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 V v\u0113rt\u012bba;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; pa kreisi = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; pa labi = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; vec\u0101ks;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts p\u0101rejo\u0161s Entry&lt;Key,Data&gt; sakne = null;<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> \u00a0 priv\u0101t\u0101 ievade&lt;Key,Data&gt; getEntry (atsl\u0113gas atsl\u0113ga) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;Key,Data&gt; p = sakne;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Tausti\u0146\u0161 k = atsl\u0113ga;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 while (p != null) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int cmp = k.<b> <span style=\"color:#990000;\"> sal\u012bdzin\u0101tTo(p.key)<\/span> <\/b> ;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ja (cmp == 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties p;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cit\u0101di, ja (cmp &lt; 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.pa kreisi;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cits\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.pa labi;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 return null;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 publiskais B\u016bla satursKey(Key key) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 atgriezties getEntry(atsl\u0113ga) != null;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Iepriek\u0161 min\u0113taj\u0101 piem\u0113r\u0101 tipa parametrs <tt> Atsl\u0113ga<\/tt> ir saist\u012bts <tt> Sal\u012bdzin\u0101ms&lt;Key&gt;<\/tt> .\u00a0 Iesie\u0161anas specifik\u0101cijai ir divas sekas:<\/p>\n<ul>\n<li><i> Tas nodro\u0161ina piek\u013cuvi metod\u0113m, kuras nosaka saite<\/i> .\u00a0 Piem\u0113r\u0101 iesiets <tt> Sal\u012bdzin\u0101ms&lt;Key&gt; <\/tt> nodro\u0161ina piek\u013cuvi <tt> sal\u012bdzin\u0101t Ar<\/tt> metode, kuru m\u0113s v\u0113lamies izmantot, \u012bstenojot m\u016bsu <tt> TreeMap<\/tt> klas\u0113.<\/li>\n<\/ul>\n<ul>\n<li><i> Visp\u0101r\u0113j\u0101 tipa instanti\u0101cijai var izmantot tikai tipus &#8220;ierobe\u017e\u0101s&#8221;.<\/i> \u00a0 Piem\u0113r\u0101 parametriz\u0113ts tips, piem\u0113ram, <tt> TreeMap&lt;Number,String&gt;<\/tt> tiktu noraid\u012bts, jo tips <tt> Numurs<\/tt> nav apak\u0161tips <tt> Sal\u012bdzin\u0101ms&lt;Number&gt;<\/tt> .\u00a0 T\u0101ds parametriz\u0113ts tips k\u0101 <tt> TreeMap&lt;String,String&gt;<\/tt> tiktu pie\u0146emts, jo tips String ir robe\u017e\u0101s, t.i., ir apak\u0161tips <tt> Sal\u012bdzin\u0101ms&lt;String&gt;<\/tt> .<\/li>\n<\/ul>\n<p>Visas klases, saskarnes un enum tipus var izmantot k\u0101 tipa parametru saist\u012btus, tostarp ligzdotos un iek\u0161\u0113jos tipus.\u00a0 Ne primit\u012bvie tipi, ne mas\u012bvu veidi netiek izmantoti k\u0101 tipa parametru saist\u012bba.<\/p>\n<p>Piem\u0113ri (tipa parametru robe\u017e\u0101m):<\/p>\n<blockquote><p><tt> klase X0 &lt;T pagarina <b> <span style=\"color:#000099;\"> starpt<\/span> <\/b> &gt; { ... }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> klase X1 &lt;T pagarina <b> <span style=\"color:#000099;\"> Objekts[]<\/span> <\/b> &gt; { ... } <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> klase X2 &lt;T pagarina <b> <span style=\"color:#000099;\"> Numurs<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X3 &lt;T pagarina <b> <span style=\"color:#000099;\"> St\u012bga<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X4 &lt;T pagarina <b> <span style=\"color:#000099;\"> Palaist<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X5 &lt;T pagarina <b> <span style=\"color:#000099;\"> Pavediens.Valsts<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X6 &lt;T pagarina <b> <span style=\"color:#000099;\"> Saraksts<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X7 &lt;T pagarina <b> <span style=\"color:#000099;\"> Saraksts&lt;String&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X8 &lt;T pagarina <b> <span style=\"color:#000099;\"> List&lt;? pagarina Number&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X9 &lt;T pagarina <b> <span style=\"color:#000099;\"> Sal\u012bdzin\u0101ms&lt;? super numurs&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> klase X10&lt;T pagarina <b> <span style=\"color:#000099;\"> Karte.Entry&lt;?,?&gt;<\/span> <\/b> &gt; { ... }<\/tt><\/p><\/blockquote>\n<p>Koda paraugs par\u0101da, ka primit\u012bvie veidi, piem\u0113ram, <tt> starpt<\/tt> un mas\u012bvu veidi, piem\u0113ram, <tt> Objekts[] <\/tt> nav at\u013cauti k\u0101 tipa parametri.<\/p>\n<p>Klases veidi, piem\u0113ram <tt> Numurs<\/tt> vai <tt> St\u012bga<\/tt> , un saskarnes veidi, piem\u0113ram, <tt> Palaist<\/tt> , ir at\u013cauti k\u0101 tipa parametri.<\/p>\n<p>Enum veidi, piem\u0113ram <tt> Pavediens.Valsts<\/tt> ir at\u013cauti ar\u012b k\u0101 tipa parametri. <tt> Pavediens.Valsts<\/tt> ir ligzdot\u0101 tipa piem\u0113rs, kas tiek izmantots k\u0101 tipa parametru ierobe\u017eojums.\u00a0 Ir at\u013cauti ar\u012b nestatiski iek\u0161\u0113jie veidi.<\/p>\n<p>Neapstr\u0101d\u0101ti tipi ir at\u013cauti k\u0101 tipa parametru ierobe\u017eojumi; <tt> <span style=\"color:#000000;\"> Saraksts<\/span> <\/tt> ir piem\u0113rs.<\/p>\n<p>Parametru tipi ir at\u013cauti k\u0101 tipa parametri, tostarp konkr\u0113ti parametriz\u0113ti tipi, piem\u0113ram, <tt> Saraksts&lt;String&gt;<\/tt> , ierobe\u017eoti aizst\u0101j\u0113jz\u012bmes parametriz\u0113tie tipi, piem\u0113ram, <tt> List&lt;? pagarina Number&gt;<\/tt> un <tt> Sal\u012bdzin\u0101ms&lt;? super Long&gt;<\/tt> , un neierobe\u017eoti aizst\u0101j\u0113jz\u012bmju parametriz\u0113tie veidi, piem\u0113ram, <tt> Karte.Entry&lt;?,?&gt;<\/tt> .\u00a0 Iesaist\u012bjums, kas ir aizst\u0101j\u0113jz\u012bmes parametriz\u0113ts tips, k\u0101 tipa arguments \u013cauj izmantot visus veidus, kas pieder tipu saimei, ko apz\u012bm\u0113 aizst\u0101j\u0113jz\u012bme.\u00a0 Aizst\u0101j\u0113jz\u012bmes parametriz\u0113t\u0101 tipa saist\u012bba nodro\u0161ina tikai ierobe\u017eotu piek\u013cuvi laukiem un metod\u0113m; ierobe\u017eojumi ir atkar\u012bgi no aizst\u0101j\u0113jz\u012bmes veida.<\/p>\n<p>Piem\u0113rs (aizst\u0101j\u0113jz\u012bmes parametriz\u0113tam tipam k\u0101 tipa parametra ierobe\u017eojumam):<\/p>\n<blockquote><p><tt> klase X&lt;<b> <span style=\"color:#000099;\"> T pagarina List&lt;? pagarina Number&gt;<\/span> <\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0 public void someMethod(T t) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 t.add(new Long(0L));\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Skaitlis n = t.remove(0);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> klases ieskaite {<\/tt><br \/>\n<tt> \u00a0 public static void main(String[] args) {<\/tt><br \/>\n<tt> <b> <span style=\"color:#660000;\"> \u00a0\u00a0\u00a0\u00a0 <\/span> <\/b> <span style=\"color:#000000;\"> X&lt;ArrayList&lt;<\/span> <b> <span style=\"color:#000099;\"> Gar\u0161<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x1 = jauns X&lt;ArrayList&lt;Long&gt;&gt;();\u00a0<\/span> <\/tt><br \/>\n<tt> <span style=\"color:#000000;\"> \u00a0\u00a0\u00a0\u00a0 X&lt;ArrayList&lt;<\/span> <b> <span style=\"color:#000099;\"> St\u012bga<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x2 = jauns X&lt;ArrayList&lt;String&gt;&gt;(); <\/span> <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Tipa atsauces main\u012bgie<tt> T <\/tt> (tipa parametrs) tiek apstr\u0101d\u0101ti k\u0101 aizst\u0101j\u0113jz\u012bmes tipa atsauces main\u012bgie (tipa parametrs ir saist\u012bts).\u00a0 M\u016bsu piem\u0113r\u0101 sekas ir t\u0101das, ka kompilators noraida t\u0101du meto\u017eu izsauk\u0161anu, kas izmanto &#8220;nezin\u0101ma&#8221; tipa argumentu, ko apz\u012bm\u0113 tipa parametrs, piem\u0113ram, <tt> List.add<\/tt> , jo saist\u012bba ir aizst\u0101j\u0113jz\u012bmes parametriz\u0113ts tips ar aug\u0161\u0113jo robe\u017eu.<br \/>\nTaj\u0101 pa\u0161\u0101 laik\u0101 saisto\u0161s <tt> List&lt;? pagarina Number&gt;<\/tt> nosaka veidus, kurus var izmantot k\u0101 tipa argumentus. Kompilators pie\u0146em visus tipa argumentus, kas pieder tipu saimei <tt> List&lt;? pagarina Number&gt;<\/tt> , tas ir, visi apak\u0161tipi <tt> Saraksts<\/tt> ar tipa argumentu, kas ir apak\u0161tips <tt> Numurs<\/tt> .<\/p>\n<p>Tipa parametru var izmantot k\u0101 cita tipa parametra saiti.<\/p>\n<p>Piem\u0113rs (tipa parametram, ko izmanto k\u0101 tipa parametra ierobe\u017eojumu):<\/p>\n<blockquote><p><tt> klase Tr\u012bsk\u0101r\u0161s<b> &lt;T&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais T fst, snd, trd;<\/tt><br \/>\n<tt> \u00a0 publiskais &lt;<b> U<\/b> <b> <span style=\"color:#000099;\"> pagarina T<\/span> <\/b> , <b> V <span style=\"color:#000099;\"> pagarina T<\/span> <\/b> , <b> W <span style=\"color:#000099;\"> pagarina T<\/span> <\/b> &gt; Triple(U arg1, V arg2, W arg3) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 fst = arg1;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 snd = arg2;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 trd = arg3;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>\u0160aj\u0101 piem\u0113r\u0101 tipa parametrs <tt> T<\/tt> no parametriz\u0113t\u0101s klases tiek izmantota k\u0101 tipa parametru saist\u012bba <tt> U<\/tt> ,\u00a0 <tt> V<\/tt> un <tt> W<\/tt> \u0161\u012bs klases parametriz\u0113t\u0101s instances metodi.<\/p>\n<p>Citas iesp\u0113jas izmantot tipa parametrus k\u0101 citu tipa parametru robe\u017eas ietver situ\u0101cijas, kad ligzdots tips ir defin\u0113ts visp\u0101r\u012bg\u0101 tipa iek\u0161pus\u0113 vai viet\u0113j\u0101 klase ir defin\u0113ta visp\u0101r\u012bg\u0101 metod\u0113.\u00a0 Ir pat at\u013cauts izmantot tipa parametru k\u0101 cita tipa parametra saist\u012bbu taj\u0101 pa\u0161\u0101 tipa parametru sada\u013c\u0101.<\/p>\n<p>Iesaist\u012bjums, kas ir klase, nodro\u0161ina piek\u013cuvi visiem t\u0101s publiskajiem dal\u012bbniekiem, tas ir, publiskajiem laukiem, metod\u0113m un ligzdotajiem veidiem. Tikai konstruktori netiek padar\u012bti pieejami, jo nav garantijas, ka saites apak\u0161klasei ir t\u0101di pa\u0161i konstruktori k\u0101 saitei.<\/p>\n<p>Piem\u0113rs (klasei, ko izmanto k\u0101 tipa parametra saiti):<\/p>\n<blockquote><p><tt> publiska klase <span style=\"color:#000000;\"> Superklase<\/span> {<\/tt><tt> \u00a0\u00a0\u00a0 \/\/ statiski dal\u012bbnieki<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiskais saraksts EnumType {THIS, THAT}<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public static Object staticField;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public static void staticMethod() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ nestatiski dal\u012bbnieki<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiska klase InnerClass { ... }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiskais objekts nonStaticField;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public void nonStaticMethod() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ konstruktori<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiska SuperClass() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ priv\u0101tie dal\u012bbnieki<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 private Object privateField;\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<p><tt> publisk\u0101 fin\u0101la klase SomeClass&lt;T pagarina <b> <span style=\"color:#006600;\"> Superklase<\/span> <\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 priv\u0101tais T objekts;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public SomeClass(T t) { objekts = t; }\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 public String toString() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"static ligzdota tips\u00a0\u00a0\u00a0 : \"+T.EnumType.class+\"\\n\"\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"statiskais lauks\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"statisk\u0101 metode\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nestatisks ligzdots veids: \"+T.InnerClass.class+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nestatisks lauks\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nestatisk\u0101 metode\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"konstruktors\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+(jauns T())+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ k\u013c\u016bda<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"priv\u0101ts dal\u012bbnieks\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.privateField+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ k\u013c\u016bda\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Saist\u012bts <tt> Superklase<\/tt> nodro\u0161ina piek\u013cuvi t\u0101 ligzdotajiem veidiem, statiskajiem laukiem un metod\u0113m, k\u0101 ar\u012b nestatiskajiem laukiem un metod\u0113m.\u00a0 Tikai konstruktors nav pieejams.\u00a0 Tas ir t\u0101p\u0113c, ka konstruktori netiek mantoti. Katra apak\u0161klase defin\u0113 savus konstruktorus, un tai nav j\u0101atbalsta savas virsklases konstruktori.\u00a0 T\u0101d\u0113j\u0101di nav garantijas, ka apak\u0161klase <tt> Superklase<\/tt> b\u016bs t\u0101ds pats konstruktors k\u0101 t\u0101s superklasei.<\/p>\n<p>Konteksts, kur\u0101<tt> Enum&lt;E papla\u0161ina Enum&lt;E&gt;&gt;<\/tt> Par\u0101d\u0101s deklar\u0101cija <tt> Enum<\/tt> klase iepakojum\u0101 <tt> java.lang<\/tt> :<\/p>\n<blockquote><p><tt> publiska abstrakt\u0101 klase <b> Enum&lt;E papla\u0161ina Enum&lt;E&gt;&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Veids <tt> Enum<\/tt> ir visu uzskait\u012b\u0161anas veidu kop\u0113j\u0101 b\u0101zes klase.\u00a0 Java valod\u0101 uzskaites veids, piem\u0113ram, <tt> Kr\u0101sa<\/tt> tiek tulkots klas\u0113 <tt> Kr\u0101sa<\/tt> kas pagarina <tt> Enum&lt;Color&gt;<\/tt> . Superklases m\u0113r\u0137is <tt> Enum<\/tt> ir nodro\u0161in\u0101t funkcionalit\u0101ti, kas ir kop\u012bga visiem uzskait\u012b\u0161anas veidiem.<\/p>\n<p>\u0160eit ir klases skice <tt> Enum<\/tt> :<\/p>\n<blockquote><p><tt> publiska abstrakt\u0101 klase <b> Enum&lt;<span style=\"color:#000099;\"> E<\/span> pagarina Enum&lt;E&gt;&gt;<\/b> ievie\u0161 Comparable&lt;<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt;, serializ\u0113jams {<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts beigu virknes nosaukums;<\/tt><br \/>\n<tt> \u00a0 publiskais gala virknes nosaukums() { ... }<\/tt><tt> \u00a0 priv\u0101ts gala ind ordin\u0101ls;<\/tt><br \/>\n<tt> \u00a0 public final int ordinal() { ... }<\/tt><\/p>\n<p><tt> \u00a0 Protected Enum (virknes nosaukums, int k\u0101rtas) { ... }<\/tt><\/p>\n<p><tt> \u00a0 public String\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 toString() { ... }<\/tt><br \/>\n<tt> \u00a0 publiska gal\u012bg\u0101 B\u016bla v\u0113rt\u012bba ir vien\u0101da (Object other) { ... }<\/tt><br \/>\n<tt> \u00a0 public final int hashCode() { ... }<\/tt><br \/>\n<tt> \u00a0 aizsarg\u0101ts gala Objekta klons() izmet CloneNotSupportedException { ... }<\/tt><br \/>\n<tt> \u00a0 publisks gala int sal\u012bdzin\u0101tTo(<b> <span style=\"color:#000099;\"> E<\/span> <\/b> o) {...}<\/tt><\/p>\n<p><tt> \u00a0 publiskais fin\u0101ls Class&lt;<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt; getDeclaringClass() { ... }<\/tt><br \/>\n<tt> \u00a0 publiskais statiskais &lt;T papla\u0161ina Enum&lt;T&gt;&gt; T valueOf(Class&lt;T&gt; enumType, virknes nosaukums) { ... }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>P\u0101rsteidzo\u0161\u0101 iez\u012bme deklar\u0101cij\u0101 &#8220;<tt> Enum&lt;E papla\u0161ina Enum&lt;E&gt;&gt;<\/tt> &#8221; ir fakts, ka jaunizveidot\u0101 klase <tt> Enum<\/tt> un t\u0101 jaundefin\u0113tais tipa parametrs <tt> E <\/tt> par\u0101d\u0101s t\u0101 pa\u0161a tipa parametra robe\u017e\u0101s.\u00a0 Tas noz\u012bm\u0113, ka <tt> Enum<\/tt> tips ir j\u0101veido vienam no t\u0101 apak\u0161tipiem.\u00a0 Lai saprastu, k\u0101p\u0113c tas ir j\u0113ga, \u0146emiet v\u0113r\u0101, ka katrs enum veids tiek tulkots apak\u0161tip\u0101 <tt> Enum<\/tt> .<\/p>\n<p>\u0160eit ir izdom\u0101ts enum veids <tt> Kr\u0101sa<\/tt> :<\/p>\n<blockquote><p><tt> enum <b> Kr\u0101sa<\/b> {SARKANS, ZILS, ZA\u013bS}<\/tt><\/p><\/blockquote>\n<p>Kompilators to p\u0101rtulko \u0161\u0101d\u0101 klas\u0113:<\/p>\n<blockquote><p><tt> publisk\u0101 nosl\u0113guma klase <b> Kr\u0101sa<\/b> pagarina <b> Enum&lt;Color&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 public static final Color[] value() { return (Color[])$VALUES.clone(); }<\/tt><br \/>\n<tt> \u00a0 public static Color valueOf(virknes nosaukums) { ... }<\/tt><tt> \u00a0 priv\u0101t\u0101 Kr\u0101sa(String s, int i) { super(s, i); }<\/tt><\/p>\n<p><tt> \u00a0 publiska statiska gala Kr\u0101sa SARKANA;<\/tt><br \/>\n<tt> \u00a0 publiska statisk\u0101 fin\u0101la Kr\u0101sa ZILA;<\/tt><br \/>\n<tt> \u00a0 publiska statisk\u0101 gala Kr\u0101sa ZA\u013bA;<\/tt><\/p>\n<p><tt> \u00a0 priv\u0101ts statisks gala Kr\u0101sa $VALUES[];<\/tt><\/p>\n<p><tt> \u00a0 static {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SARKANS = jauna kr\u0101sa (\"SARKANS\", 0);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 ZILS = new Color(\"ZILS\", 1);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 ZA\u013bS = jauna kr\u0101sa (\"ZA\u013bA\", 2);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 $V\u0112RT\u012aBAS = (jauna kr\u0101sa[] { SARKANS, ZILS, ZA\u013bS });<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Mantojumam ir t\u0101da ietekme, ka <tt> Kr\u0101sa<\/tt> tips manto visas taj\u0101 ieviest\u0101s metodes <tt> Enum&lt;Color&gt;<\/tt> .\u00a0 Starp tiem ir <tt> sal\u012bdzin\u0101t Ar<\/tt> metodi.\u00a0 The <tt> Kr\u0101sa. sal\u012bdzin\u0101t Ar<\/tt> metodei, iesp\u0113jams, vajadz\u0113tu \u0146emt a <tt> Kr\u0101sa<\/tt> k\u0101 arguments.\u00a0 Lai tas notiktu klase <tt> Enum<\/tt> ir visp\u0101r\u012bgs un <tt> Enum.compareTo<\/tt> metode aiz\u0146em <tt> Enum<\/tt> tipa parametrs <tt> E <\/tt> k\u0101 arguments.\u00a0 Rezult\u0101t\u0101 ierakstiet <tt> Kr\u0101sa<\/tt> atvasin\u0101ts no <tt> Enum&lt;Color&gt;<\/tt> manto a <tt> sal\u012bdzin\u0101t Ar<\/tt> metode, kas prasa a <tt> Kr\u0101sa<\/tt> k\u0101 un arguments, tie\u0161i t\u0101, k\u0101 vajadz\u0113tu.<br \/>\nJa m\u0113s sadal\u0101m deklar\u0101ciju &#8220;<tt> Enum&lt;E papla\u0161ina Enum&lt;E&gt;&gt;<\/tt> &#8220;M\u0113s redzam, ka \u0161im modelim ir vair\u0101ki aspekti.<\/p>\n<p>Pirmk\u0101rt, ir fakts, ka tipa parametra saist\u012bba ir pats tips: &#8220;<tt> <b> Enum<\/b> &lt;E pagarina <b> Enum<\/b> &lt;E&gt;&gt;<\/tt> &#8220;. Tas nodro\u0161ina, ka tikai tipa apak\u0161tipi <tt> Enum<\/tt> ir at\u013cauti k\u0101 tipa argumenti. (Teor\u0113tiski ierakstiet <tt> Enum<\/tt> var\u0113tu b\u016bt iemiesojum\u0101 pats par sevi, piem\u0113ram, in <tt> Enum&lt;Enum&gt;<\/tt> , ta\u010du tas noteikti nav dom\u0101ts, un ir gr\u016bti iedom\u0101ties situ\u0101ciju, kur\u0101 \u0161\u0101da instanc\u0113 b\u016btu noder\u012bga.)<\/p>\n<p>Otrk\u0101rt, ir fakts, ka ar parametru saist\u012btais tips ir parametriz\u0113tais tips <tt> Enum<b> &lt;E&gt;<\/b> <\/tt> , kas izmanto tipa parametru <tt> E<\/tt> k\u0101 saist\u012bjuma tipa arguments. \u0160\u012b deklar\u0101cija nodro\u0161ina mantojuma attiec\u012bbu starp apak\u0161tipu un instanti\u0101ciju <tt> Enum<\/tt> ir formas<tt> X papla\u0161ina Enum&lt;X&gt;<\/tt> &#8220;. Apak\u0161tips, piem\u0113ram, &#8220;<tt> X papla\u0161ina Enum&lt;Y&gt;<\/tt> &#8221; nevar deklar\u0113t tipa argumenta d\u0113\u013c <tt> Y<\/tt> neb\u016btu robe\u017e\u0101s; tikai apak\u0161tipi <tt> Enum&lt;X&gt;<\/tt> ir robe\u017e\u0101s.<\/p>\n<p>Tre\u0161k\u0101rt, ir fakts, ka <tt> Enum<\/tt> pirmk\u0101rt, ir visp\u0101r\u012bgs.\u00a0 Tas noz\u012bm\u0113, ka da\u017eas no klases metod\u0113m <tt> Enum<\/tt> \u0146emt argumentu vai atgriezt nezin\u0101ma tipa v\u0113rt\u012bbu (vai cit\u0101di b\u016bt atkar\u012bga no nezin\u0101ma veida). K\u0101 m\u0113s jau zin\u0101m, \u0161is nezin\u0101mais tips v\u0113l\u0101k b\u016bs apak\u0161tips <tt> X<\/tt> no <tt> Enum&lt;X&gt;<\/tt> .\u00a0 T\u0101d\u0113j\u0101di parametriz\u0113taj\u0101 tip\u0101 <tt> Enum&lt;X&gt;<\/tt> , \u0161\u012bs metodes ietver apak\u0161tipu <tt> X<\/tt> , un tie tiek mantoti apak\u0161tip\u0101 <tt> X<\/tt> .\u00a0 The <tt> sal\u012bdzin\u0101t Ar<\/tt> metode ir \u0161\u0101das metodes piem\u0113rs; tas tiek mantots no virsklases katr\u0101 apak\u0161klas\u0113, un katr\u0101 gad\u012bjum\u0101 tam ir apak\u0161klasei specifisks paraksts.<\/p>\n<p>Rezum\u0113jot, deklar\u0101cija &#8220;<tt> Enum&lt;E papla\u0161ina Enum&lt;E&gt;&gt;<\/tt> &#8221; var at\u0161ifr\u0113t \u0161\u0101di: <tt> Enum<\/tt> ir visp\u0101r\u012bgs tips, ko var iemiesot tikai t\u0101 apak\u0161tipiem, un \u0161ie apak\u0161tipi p\u0101rmantos da\u017eas noder\u012bgas metodes, no kur\u0101m da\u017eas izmanto apak\u0161tipam specifiskus argumentus (vai cit\u0101di ir atkar\u012bgi no apak\u0161tipa).<\/p>\n<p><b>Kla\u0161u apak\u0161\u0113j\u0101s robe\u017eas tipa parametri<\/b><\/p>\n<p>Tipa parametriem var b\u016bt vair\u0101kas robe\u017eas, piem\u0113ram, in <tt> klases Box&lt;T pagarina Number&gt; {...}<\/tt> . Bet tipa parametram nevar b\u016bt zem\u0101kas robe\u017eas, tas ir, t\u0101da konstrukcija k\u0101 <tt> klases Box&lt;T <b> lieliski<\/b> Numurs&gt; {...}<\/tt> nav at\u013cauts.\u00a0 K\u0101p\u0113c ne?\u00a0 Atbilde ir: tas ir bezj\u0113dz\u012bgi, jo tas jums neko nepirktu, ja tas b\u016btu at\u013cauts.\u00a0 Redz\u0113sim, k\u0101p\u0113c kla\u0161u apak\u0161\u0113j\u0101s robe\u017eas tipa parametri ir mulsino\u0161i, izp\u0113tot, ko noz\u012bm\u0113 tipa parametra aug\u0161\u0113j\u0101 robe\u017ea.<\/p>\n<p>Tipa parametra aug\u0161\u0113jai robe\u017eai ir tr\u012bs efekti:<\/p>\n<ol>\n<ol>\n<li><b> <i> Ierobe\u017eota instanc\u0113.<\/i> <\/b> Aug\u0161\u0113j\u0101 robe\u017ea ierobe\u017eo veidu kopu, ko var izmantot visp\u0101r\u012bg\u0101 tipa instanc\u0113m.\u00a0 Ja m\u0113s pasludin\u0101m a <tt> klases Box&lt;T pagarina Number&gt; {...} <\/tt> tad kompilators nodro\u0161in\u0101tu, ka tikai apak\u0161tipi <tt> Numurs<\/tt> var izmantot k\u0101 tipa argumentu.\u00a0 Tas ir, a <tt> Kaste&lt;Number&gt;<\/tt> vai a <tt> Kaste&lt;Long&gt;<\/tt> ir at\u013cauts, bet a <tt> Box&lt;Object&gt;<\/tt> vai <tt> Box&lt;String&gt;<\/tt> tiktu noraid\u012bts<\/li>\n<\/ol>\n<\/ol>\n<p>Piem\u0113rs (ierobe\u017eotai instanti\u0101cijai tipa parametra aug\u0161\u0113j\u0101s robe\u017eas d\u0113\u013c):<br \/>\n<tt> klases Box&lt;T pagarina Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101t\u0101 T v\u0113rt\u012bba;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(T t) { v\u0113rt\u012bba = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><tt> klases ieskaite {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Box&lt;Long&gt; boxOfLong = jauns Box&lt;Long&gt;(0L);\u00a0\u00a0 <b> \/\/ labi<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Box&lt;String&gt; boxOfString = jauns Box&lt;String&gt;(\"\"); <b> <span style=\"color:#330000;\"> \/\/ k\u013c\u016bda: virkne nav robe\u017e\u0101s<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>\n<li><b> <i> Piek\u013cuve nestatiskajiem dal\u012bbniekiem. <\/i> <\/b> Aug\u0161\u0113j\u0101 robe\u017ea nodro\u0161ina piek\u013cuvi vis\u0101m publiskaj\u0101m nestatiskaj\u0101m metod\u0113m un aug\u0161\u0113j\u0101s robe\u017eas laukiem.\u00a0 \u012astenojot m\u016bsu <tt> klases Box&lt;T pagarina Number&gt; {...}<\/tt> m\u0113s varam izsaukt visas klas\u0113 defin\u0113t\u0101s publisk\u0101s nestatisk\u0101s metodes <tt> Numurs<\/tt> , piem\u0113ram, <tt> intValue()<\/tt> piem\u0113ram.\u00a0 Bez aug\u0161\u0113j\u0101s robe\u017eas kompilators noraid\u012btu jebkuru \u0161\u0101du izsauk\u0161anu. Piem\u0113rs (piek\u013cuve nestatiskiem dal\u012bbniekiem tipa parametra aug\u0161\u0113j\u0101s robe\u017eas d\u0113\u013c):<\/li>\n<\/ol>\n<p><tt> klases Box&lt;T pagarina Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101t\u0101 T v\u0113rt\u012bba;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(T t) { v\u0113rt\u012bba = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public int increment() { return value.intValue()+1; } <b> \/\/ &lt;= b\u016btu k\u013c\u016bda, ja numurs neb\u016btu saist\u012bts<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>\n<li><b> <i> Ierakstiet Dz\u0113st. <\/i> <\/b> Kreis\u0101k\u0101 aug\u0161\u0113j\u0101 robe\u017ea tiek izmantota tipa dz\u0113\u0161anai, un t\u0101 aizst\u0101j tipa parametru baita kod\u0101.\u00a0 M\u016bsu <tt> klases Box&lt;T pagarina Number&gt; {...}<\/tt> visi gad\u012bjumi <tt> T<\/tt> tiktu aizst\u0101ta ar aug\u0161\u0113jo robe\u017eu <tt> Numurs<\/tt> .\u00a0 Piem\u0113ram, ja klase <tt> Kaste<\/tt> ir priv\u0101ts tipa lauks <tt> T<\/tt> un metode <tt> tuk\u0161s komplekts (T saturs) <\/tt> lai iestat\u012btu \u0161o priv\u0101to lauku, lauks b\u016btu tipa <tt> Numurs<\/tt> p\u0113c tipa dz\u0113\u0161anas un metode tiks p\u0101rtulkota par metodi <tt> neder\u012bgs komplekts (skaita saturs)<\/tt> .<\/li>\n<\/ol>\n<\/ol>\n<p>Piem\u0113rs (tipa parametra aug\u0161\u0113j\u0101s robe\u017eas izmanto\u0161anai tipa dz\u0113\u0161anas gad\u012bjum\u0101 &#8211; <i> pirms tam<\/i> veida dz\u0113\u0161ana):<br \/>\n<tt> klases Box&lt;<b> T papla\u0161ina Skaitli<\/b> &gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101ts <b> T<\/b> v\u0113rt\u012bba;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(<b> T<\/b> t) {v\u0113rt\u012bba = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>Piem\u0113rs (tipa parametra aug\u0161\u0113j\u0101s robe\u017eas izmanto\u0161anai tipa dz\u0113\u0161anas gad\u012bjum\u0101 &#8211;<\/ol>\n<\/ol>\n<p><i> p\u0113c<\/i><\/p>\n<ol>\n<ol>veida dz\u0113\u0161ana):<\/ol>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><tt> class Box {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101ts <b> Numurs<\/b> v\u0113rt\u012bba;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(<b> Numurs<\/b> t) {v\u0113rt\u012bba = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>Turkl\u0101t t\u0101l\u0101k\u0101s kreis\u0101s malas aug\u0161\u0113j\u0101 robe\u017ea par\u0101d\u0101s cit\u0101s viet\u0101s, piem\u0113ram, autom\u0101tiski ievietotos metienos un tilta metod\u0113s.<\/ol>\n<p>Ja tipa parametriem b\u016btu at\u013cautas zem\u0101kas robe\u017eas, k\u0101das blakuspar\u0101d\u012bbas t\u0101m b\u016btu vai t\u0101m vajadz\u0113tu b\u016bt? Ja t\u0101da konstrukcija k\u0101 <tt> klases Box&lt;T <b> lieliski<\/b> Numurs&gt; {...} <\/tt> bija at\u013cauts, ko tas noz\u012bm\u0113tu?\u00a0 Ko aug\u0161\u0113j\u0101 tipa parametru ierobe\u017eojuma 3 blakusefekti \u2014 ierobe\u017eota instan\u010du izveide, piek\u013cuve nestatiskajam dal\u012bbniekam, tipa dz\u0113\u0161ana \u2014 noz\u012bm\u0113tu apak\u0161\u0113jai robe\u017eai?<\/p>\n<p><i> Ierobe\u017eotas instancijas. <\/i> Kompilators var ierobe\u017eot tipu kopu, ko var izmantot visp\u0101r\u012bg\u0101 tipa instanc\u0113m ar zem\u0101kas robe\u017eas tipa parametru.\u00a0 Piem\u0113ram, kompilators var\u0113tu at\u013caut t\u0101das instancijas k\u0101 <tt> Kaste&lt;Number&gt;<\/tt> un <tt> Box&lt;Object&gt;<\/tt> no a <tt> Kaste&lt;T <b> lieliski<\/b> Numurs&gt; <\/tt> un noraid\u012bt instancijas, piem\u0113ram, <tt> Kaste&lt;Long&gt;<\/tt> vai <tt> Kaste&lt;Short&gt;<\/tt> .\u00a0 Tas b\u016btu efekts, kas atbilstu ierobe\u017eojo\u0161ajam blakusefektam, kas aprakst\u012bts aug\u0161\u0113j\u0101 tipa parametru robe\u017e\u0101m.<\/p>\n<p><i> Piek\u013cuve nestatiskajiem dal\u012bbniekiem. <\/i> Zem\u0101ka tipa parametru robe\u017ea nedod piek\u013cuvi nevienai konkr\u0113tai metodei, iz\u0146emot t\u0101s, kas mantotas no klases <tt> Objekts<\/tt> . Piem\u0113r\u0101 <tt> Kaste&lt;T <b> lieliski<\/b> Numurs&gt; <\/tt> supertipi <tt> Numurs<\/tt> tiem nav nek\u0101 kop\u012bga, iz\u0146emot to, ka tie ir atsauces tipi un l\u012bdz ar to apak\u0161tipi <tt> Objekts<\/tt> .\u00a0 Kompilators nevar pie\u0146emt, ka lauka tipa <tt> T<\/tt> ir tipa <tt> Numurs<\/tt> vai t\u0101 apak\u0161tips.\u00a0 T\u0101 viet\u0101 tipa lauks <tt> T<\/tt> var b\u016bt jebkura supertipa <tt> Numurs<\/tt> , piem\u0113ram, <tt> Serializ\u0113jams<\/tt> vai <tt> Objekts<\/tt> .\u00a0 T\u0101das metodes piesauk\u0161ana k\u0101 <tt> intValue()<\/tt> vairs nav tipa dro\u0161s, un kompilatoram tas b\u016btu j\u0101noraida. Rezult\u0101t\u0101 zem\u0101k\u0101 tipa parametru robe\u017ea nedotu piek\u013cuvi nestatiskiem elementiem, kas p\u0101rsniedz klas\u0113 defin\u0113tos <tt> Objekts<\/tt> un t\u0101d\u0113j\u0101di tam ir t\u0101ds pats efekts k\u0101 &#8220;bez ierobe\u017eojumiem&#8221;.<\/p>\n<p><i> Ierakstiet Dz\u0113st<\/i> .\u00a0 Iev\u0113rojot \u0161o lo\u0123ikas l\u012bniju, nav j\u0113gas tipa parametra gad\u012bjumus aizst\u0101t ar t\u0101 vist\u0101l\u0101k kreiso apak\u0161\u0113jo robe\u017eu.\u00a0 Metodes deklar\u0113\u0161ana, piem\u0113ram, konstruktors <tt> Box(<b> T<\/b> t) <\/tt> k\u0101 konstruktors <tt> Box(<b> Numurs<\/b> t)<\/tt> nav j\u0113gas, \u0146emot v\u0113r\u0101 to <tt> T<\/tt> tiek aizst\u0101ts ar supertipu <tt> Numurs<\/tt> .\u00a0 An <tt> Objekts<\/tt> var pamatoti nodot konstruktoram instanti\u0101cij\u0101 <tt> Box&lt;Object&gt;<\/tt> un konstruktors to noraid\u012btu.\u00a0 Tas b\u016btu \u013coti nepareizi.\u00a0\u00a0 T\u0101tad tipa dz\u0113\u0161ana aizst\u0101tu visus tipa main\u012bg\u0101 gad\u012bjumus<tt> T<\/tt> p\u0113c veida <tt> Objekts<\/tt> , nevis p\u0113c t\u0101s apak\u0161\u0113j\u0101s robe\u017eas.\u00a0 Atkal zem\u0101kajai robe\u017eai b\u016btu t\u0101da pati ietekme k\u0101 &#8220;bez ierobe\u017eojuma&#8221;.<\/p>\n<p>Vai v\u0113laties noskaidrot, ko tas noz\u012bm\u0113tu, ja abi b\u016btu zem\u0101ki <i> _un_<\/i> aug\u0161\u0113j\u0101s robe\u017eas bija at\u013cautas?\u00a0\u00a0 Person\u012bgi es pat nev\u0113los par to dom\u0101t un, ja at\u013caujat, labpr\u0101t\u0101k to ierakst\u012btu sada\u013c\u0101 &#8220;nav p\u0101rvald\u0101ms&#8221;.<\/p>\n<p>Apak\u0161\u0113j\u0101 l\u012bnija ir: viss, kas ir &#8220;<tt> lieliski<\/tt> &#8221; Saist\u012bts b\u016btu nopirkt jums ir ierobe\u017eojums, ka tikai supertypes <tt> Numurs<\/tt> var izmantot k\u0101 tipa argumentus.\u00a0 Un pat tas bie\u017ei tiek p\u0101rprasts.\u00a0 Tas NEB\u016aTU to noz\u012bm\u0113t <tt> klases Box&lt;T supernumurs&gt; {...}<\/tt> satur tikai supertipu gad\u012bjumus <tt> Numurs<\/tt> .\u00a0 Glu\u017ei otr\u0101di \u2013 k\u0101 pier\u0101da zem\u0101k redzamais piem\u0113rs!<\/p>\n<p>Piem\u0113rs (tipa parametra aug\u0161\u0113j\u0101s robe\u017eas izmanto\u0161anai tipa dz\u0113\u0161anas gad\u012bjum\u0101 &#8211; <i> pirms tam<\/i> veida dz\u0113\u0161ana):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> klases Box&lt;<b> T supernumurs<\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101ts <b> T<\/b> v\u0113rt\u012bba;<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(<b> T<\/b> t) {v\u0113rt\u012bba = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>Piem\u0113rs (tipa parametra aug\u0161\u0113j\u0101s robe\u017eas izmanto\u0161anai tipa dz\u0113\u0161anas gad\u012bjum\u0101 &#8211; <i> p\u0113c<\/i> veida dz\u0113\u0161ana):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> class Box {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101ts <b> Objekts<\/b> v\u0113rt\u012bba;<\/tt><br \/>\n<tt> \u00a0\u00a0 publisk\u0101 kaste(<b> Objekts<\/b> t) {v\u0113rt\u012bba = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>A <tt> klases Box&lt;T <b> lieliski<\/b> Numurs&gt; {...} <\/tt> tiktu tulkots p\u0113c tipa dz\u0113\u0161anas uz a <tt> Kaste<\/tt> satur an <tt> Objekts<\/tt> lauks un t\u0101 konstruktors tiktu tulkots uz <tt> Kaste (objekts t)<\/tt> . Tas b\u016btiski at\u0161\u0137iras no a <tt> klases Box&lt;T <b> pagarina<\/b> Numurs&gt; {...}<\/tt> , kas tiktu tulkots k\u0101 a <tt> Kaste<\/tt> kas satur a <tt> Numurs<\/tt> lauks un t\u0101 konstruktors tiktu tulkots uz <tt> Kaste (numurs t)<\/tt> . L\u012bdz ar to a <tt> Kaste&lt;Number&gt;<\/tt> iemiesots no a<tt> klases Box&lt;T pagarina Number&gt; {...}<\/tt> at\u0161\u0137irtos no a <tt> Kaste&lt;Number&gt;<\/tt> instanti\u0101cija no a <tt> klases Box&lt;T supernumurs&gt; {...}<\/tt> , kas var rad\u012bt neskaidr\u012bbas.\u00a0 \u0160\u012b iemesla d\u0113\u013c zem\u0101kaj\u0101m robe\u017e\u0101m nav j\u0113gas kla\u0161u tipa parametriem.<\/p>\n<p>&nbsp;<\/p>\n<hr width=\"100%\" \/>\n<p>&nbsp;<\/p>\n<p><b>Meto\u017eu apak\u0161\u0113j\u0101s robe\u017eas tipa parametri<\/b><\/p>\n<p>Saist\u012bb\u0101 ar metod\u0113m un to argumentu veidiem da\u017ek\u0101rt var b\u016bt noder\u012bgs tipa parametrs ar apak\u0161\u0113jo robe\u017eu.<\/p>\n<p>Piem\u0113rs (metodei, kas g\u016btu labumu no tipa parametra ar apak\u0161\u0113jo robe\u017eu):<\/p>\n<blockquote><p><tt> klase Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais X vispirms;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais Y sekunde;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 publiskais &lt;<b> Super X<\/b> ,<b> B super Y<\/b> &gt; B addToMap(Map&lt;A,B&gt; karte) { \/\/ k\u013c\u016bda: tipa parametram nevar b\u016bt apak\u0161\u0113j\u0101 robe\u017ea<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties karte.put(pirmais, otrais);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> klases ieskaite {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 P\u0101ris&lt;String,Long&gt; p\u0101ris = jauns P\u0101ris&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; karte = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Skait\u013ca numurs = pair.addToMap(map);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>The <tt> addToMap()<\/tt> metode pievieno p\u0101ra saturu kartei.\u00a0 Jebkura karte, kur\u0101 var b\u016bt supertipi <tt> X<\/tt> un <tt> Y<\/tt> dar\u012btu.\u00a0 Kartes <tt> likt ()<\/tt> metode atgrie\u017e kart\u0113 atrasto v\u0113rt\u012bbu dotajai atsl\u0113gai, ja atsl\u0113gai kart\u0113 jau ir atsl\u0113gas v\u0113rt\u012bbas ieraksts.\u00a0 Kartes atgrie\u0161anas v\u0113rt\u012bba <tt> likt ()<\/tt> metode tiek atgriezta no <tt> addToMap()<\/tt> metodi.\u00a0 \u0160\u0101dos apst\u0101k\u013cos metodi v\u0113lamies deklar\u0113t, k\u0101 par\u0101d\u012bts iepriek\u0161: Karte ir parametriz\u0113ta ar p\u0101ra tipa parametru supertipiem un <tt> addToMap()<\/tt> metodes atgrie\u0161anas veids ir kartes v\u0113rt\u012bbas tips.<\/p>\n<p>T\u0101 k\u0101 kompilators nepie\u013cauj zem\u0101kas robe\u017eas tipa parametriem, mums ir nepiecie\u0161ams risin\u0101jums.<\/p>\n<p>Viens no risin\u0101jumiem, kas n\u0101k pr\u0101t\u0101, ir aizst\u0101j\u0113jz\u012bmes izmanto\u0161ana, jo aizst\u0101j\u0113jz\u012bm\u0113m var b\u016bt zem\u0101ka robe\u017ea.\u00a0 \u0160is ir risin\u0101jums, izmantojot aizst\u0101j\u0113jz\u012bmi.<\/p>\n<p>Piem\u0113rs (iepriek\u0161\u0113j\u0101 piem\u0113ra risin\u0101jumam, izmantojot aizst\u0101j\u0113jz\u012bmes):<\/p>\n<blockquote><p><tt> klase Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais X vispirms;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais Y sekunde;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 publiski <b> Objekts<\/b> addToMap (Map&lt;<b> ? Super\u00a0X<\/b> , <b> ? super Y<\/b> &gt; karte) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties karte.put(pirmais, otrais);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> klases ieskaite {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 P\u0101ris&lt;String,Long&gt; p\u0101ris = jauns P\u0101ris&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; karte = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Skait\u013ca numurs = <b> (Numurs)<\/b> pair.addToMap(karte);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Tas darbojas, iz\u0146emot to, ka nav iesp\u0113jams deklar\u0113t atgrie\u0161anas veidu k\u0101 v\u0113lamo.\u00a0 Tas b\u016btu supertips <tt> Y<\/tt> ko kompilators tver no kartes veida, bet nav sintakses t\u0101 nor\u0101d\u012b\u0161anai.\u00a0 M\u0113s nedr\u012bkstam deklar\u0113t atgrie\u0161anas veidu &#8220;<tt> ? super Y<\/tt> &#8220;, jo&#8221;<tt> ? super Y<\/tt> &#8221; ir aizst\u0101j\u0113jz\u012bme, nevis veids, un t\u0101p\u0113c tas nav at\u013cauts k\u0101 atgrie\u0161anas veids. Mums nav izv\u0113les, un tas ir j\u0101izmanto <tt> Objekts<\/tt> t\u0101 viet\u0101 k\u0101 m\u016bsu metodes atgrie\u0161anas veids.\u00a0 \u0160is diezgan nespecifiskais atgrie\u0161anas veids savuk\u0101rt liek zvan\u012bt uz <tt> addToMap()<\/tt> metodi, lai samazin\u0101tu atgrie\u0161an\u0101s v\u0113rt\u012bbu no <tt> Objekts<\/tt> l\u012bdz t\u0101 faktiskajam veidam.\u00a0 Tas nav tie\u0161i tas, ko m\u0113s bij\u0101m dom\u0101ju\u0161i.<\/p>\n<p>V\u0113l viens risin\u0101jums ir statisko meto\u017eu izmanto\u0161ana.\u00a0 \u0160eit ir risin\u0101jums, izmantojot statisku metodi, nevis nestatisku metodi.<\/p>\n<p>Piem\u0113rs (iepriek\u0161\u0113j\u0101 piem\u0113ra risin\u0101jumam, izmantojot statisku metodi):<\/p>\n<blockquote><p><tt> klase Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais X vispirms;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u0101tais Y sekunde;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 publiski <b> statisks<\/b> &lt;<b> A<\/b> ,<b> B<\/b> ,X <b> pagarina A<\/b> ,Y <b> pagarina B<\/b> &gt; B addToMap (p\u0101ris&lt;X, Y&gt; p\u0101ris, Map&lt;<b> A<\/b> ,<b> B<\/b> &gt; karte) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgrie\u0161an\u0101s karte.put(pair.first,pair.otrais);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> klases ieskaite {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 P\u0101ris&lt;String,Long&gt; p\u0101ris = jauns P\u0101ris&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; karte = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Skait\u013ca numurs = <b> P\u0101ris<\/b> .addToMap(<b> p\u0101ri<\/b> ,karte);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Visp\u0101r\u012bgais <tt> addToMap()<\/tt> metodei ir \u010detri tipa parametri: divi vietturi <tt> X<\/tt> un <tt> Y<\/tt> p\u0101ra tipam un diviem vietturiem <tt> A<\/tt> un <tt> B <\/tt> kartes veidam. <tt> A<\/tt> un <tt> B<\/tt> ir supertipi <tt> X<\/tt> un <tt> Y<\/tt> , jo <tt> X<\/tt> un <tt> Y<\/tt> \u00a0 ir deklar\u0113ti ar <tt> A<\/tt> un <tt> B<\/tt> k\u0101 to aug\u0161\u0113j\u0101s robe\u017eas. (\u0145emiet v\u0113r\u0101, ka visp\u0101r\u012bg\u0101s metodes tipa parametri <tt> X<\/tt> un <tt> Y<\/tt> nav nek\u0101da sakara ar <tt> P\u0101ris<\/tt> klases <tt> X<\/tt> un <tt> Y<\/tt> parametrus.\u00a0 V\u0101rdi <tt> X<\/tt> un <tt> Y<\/tt> tiek atk\u0101rtoti izmantoti visp\u0101r\u012bgajai metodei, lai padar\u012btu tos viegli atpaz\u012bstamus k\u0101 p\u0101ra tipa parametrus. Izmantojot \u010detrus tipa parametrus, m\u0113s varam deklar\u0113t prec\u012bzu atgrie\u0161anas veidu p\u0113c v\u0113l\u0113\u0161an\u0101s: tas ir t\u0101ds pats tips k\u0101 kartes v\u0113rt\u012bbas veids.<\/p>\n<p>Piem\u0113rs (tipa parametra nelikum\u012bgai izmanto\u0161anai visp\u0101r\u012bgas klases statisk\u0101 kontekst\u0101):<\/p>\n<blockquote><p><tt> klase SomeClass<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> statiskais inicializators, statiskais lauks, statisk\u0101 metode<\/i><br \/>\n<tt> \u00a0 <b> statisks<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; tests = jauns SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;(); <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts <b> statisks<\/b> <b> <span style=\"color:#000099;\"> T<\/span> <\/b> globalInfo;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 publiski\u00a0 <b> statisks<\/b> <b> <span style=\"color:#000099;\"> T <\/span> <\/b> getGlobalInfo() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 atgriezt globalInfo;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> nestatiskais inicializators, nestatiskais lauks, nestatisk\u0101 metode<\/i><br \/>\n<tt> \u00a0 {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; tests = jauns SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> LocalInfo;<\/tt><br \/>\n<tt> \u00a0 publiski\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getLocalInfo() {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 atgriezt viet\u0113jo inform\u0101ciju;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> statiski ligzdotie veidi<\/i><br \/>\n<tt> \u00a0 publiski <b> statisks<\/b> <b> klas\u0113<\/b> K\u013c\u016bme pagarina iz\u0146\u0113mumu {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 priv\u0101tais fin\u0101ls <b> <span style=\"color:#000099;\"> T<\/span> <\/b> inform\u0101cija;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiska neveiksme (<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { info = t; }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { atgrie\u0161an\u0101s inform\u0101cija; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts <b> saskarne<\/b> Kop\u0113jams {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> kop\u0113t ();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts <b> enum<\/b> \u0161tats {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 DER\u012aGS, NEDER\u012aGS;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 priv\u0101ts <b> <span style=\"color:#000099;\"> T<\/span> <\/b> inform\u0101cija; \/\/ k\u013c\u016bda<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public void setInfo(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { info = t; } <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { atgrie\u0161an\u0101s inform\u0101cija; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> nestatiskie ligzdotie veidi<\/i><br \/>\n<tt> \u00a0 publiski <b> klas\u0113<\/b> Piek\u013cuve {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { return localInfo; }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Piem\u0113r\u0101 par\u0101d\u012bts, ka tipa parametru nevar izmantot visp\u0101r\u0113jas klases statisk\u0101 kontekst\u0101.\u00a0 Tas ar\u012b par\u0101da, ka ligzdot\u0101s saskarnes un enum tipi tiek uzskat\u012bti par klases statisk\u0101 tipa locek\u013ciem.\u00a0 Tikai iek\u0161\u0113j\u0101s klases, tas ir, nestatisk\u0101s ligzdot\u0101s klases, var izmantot ietvero\u0161\u0101s visp\u0101r\u012bg\u0101s klases tipa parametru.<\/p>\n<p>Interfeisa tipa parametra darb\u012bbas joma ir visa saskarnes defin\u012bcija, iz\u0146emot visus laukus vai ligzdotos veidus.\u00a0 Tas ir t\u0101p\u0113c, ka saskarn\u0113 defin\u0113tie lauki un ligzdotie veidi ir netie\u0161i statiski.<\/p>\n<p>Piem\u0113rs (neleg\u0101la tipa parametra izmanto\u0161ana visp\u0101r\u012bg\u0101 saskarn\u0113):<\/p>\n<blockquote><p><tt> interfeiss SomeInterface<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> lauks<\/i><br \/>\n<tt> \u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; v\u0113rt\u012bba = jauns SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> ligzdots veids<\/i><br \/>\n<tt> \u00a0 <b> klas\u0113<\/b> Piek\u013cuve {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 publiski <b> <span style=\"color:#000099;\"> T <\/span> <\/b> getInfo() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ k\u013c\u016bda<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgrie\u017e v\u0113rt\u012bbu.getGlobalInfo();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> metodes<\/i><br \/>\n<tt> \u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getValue();<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Piem\u0113r\u0101 par\u0101d\u012bts, ka saskarnes lauki ir netie\u0161i statiski, t\u0101p\u0113c tipa parametru nevar izmantot nekur visp\u0101r\u012bgas saskarnes lauka deklar\u0101cij\u0101.\u00a0 T\u0101pat ligzdot\u0101 klase tiek uzskat\u012bta par statisku ligzdotu klasi, nevis iek\u0161\u0113jo klasi, un \u0161\u012b iemesla d\u0113\u013c tipa parametra izmanto\u0161ana jebkur ligzdotaj\u0101 klas\u0113 ir nelikum\u012bga.<\/p>\n<p><b> <i> Risin\u0101jums ligzdot\u0101m statisk\u0101m klas\u0113m un saskarn\u0113m:<\/i> <\/b><\/p>\n<p>Statisku ligzdotu kla\u0161u un saskar\u0146u gad\u012bjum\u0101 t\u0101 nav liela nelaime.\u00a0 K\u0101 risin\u0101jumu m\u0113s varam \u0123ener\u0113t pa\u0161u statisko klasi vai saskarni.<\/p>\n<p>Piem\u0113rs (risin\u0101jums\u00a0\u2014 \u0123ener\u0113jiet ligzdoto statisko veidu):<\/p>\n<blockquote><p><tt> klases Iesai\u0146ot\u0101js<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais fin\u0101ls <b> <span style=\"color:#000099;\"> T<\/span> <\/b> objekts;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 publiskais iesai\u0146ot\u0101js(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) {Objekts = t; }<\/tt><br \/>\n<tt> \u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { return theObject; }<\/tt><tt> \u00a0 publisks Nemain\u012bgs<b> &lt;T&gt;<\/b> makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezt jaunu Immutable<b> &lt;T&gt;<\/b> (Objekts);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 publisks Main\u012bgs<b> &lt;T&gt;<\/b> makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezt jaunu Mutable<b> &lt;T&gt;<\/b> (Objekts);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts statisks &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 publiska statisk\u0101 beigu klase Nemain\u012bgs<b> &lt;A&gt;<\/b> { <b> \/\/ tagad ir visp\u0101r\u012bga klase<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 priv\u0101tais fin\u0101ls <b> A<\/b> objekts;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 publisks nemain\u012bgs(<b> A<\/b> arg) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 theObject = makeClone(arg);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 publiski <b> A<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezt makeClone(Objekts);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 publiska statisk\u0101 klase Main\u012bgs<b> &lt;A&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... l\u012bdz\u012bgi...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Nav \u0161\u0101da risin\u0101juma ligzdotajiem uzskaites veidiem, jo \u200b\u200btie nevar b\u016bt visp\u0101r\u012bgi.<\/p>\n<p><b> <i> Risin\u0101jums ligzdot\u0101m statisk\u0101m klas\u0113m:<\/i> <\/b><\/p>\n<p>Ja ligzdotais statiskais veids ir klase, alternat\u012bvs risin\u0101jums b\u016btu statisk\u0101s klases p\u0101rv\u0113r\u0161ana par nestatisku iek\u0161\u0113jo klasi.<\/p>\n<p>Piem\u0113rs (risin\u0101jums\u00a0\u2014 izmantojiet iek\u0161\u0113jo klasi):<\/p>\n<blockquote><p><tt> klases Iesai\u0146ot\u0101js<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais fin\u0101ls <b> <span style=\"color:#000099;\"> T<\/span> <\/b> objekts;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 publiskais iesai\u0146ot\u0101js(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) {Objekts = t; }<\/tt><br \/>\n<tt> \u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { return theObject; }<\/tt><tt> \u00a0 public Mutable makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties <b> \u0161is.<\/b> jauns Mutable(Objekts);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 public Immutable makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 atgriezties <b> \u0161is.<\/b> jauns Nemain\u012bgs(Objekts);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts statisks &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 publiska gala klase Nemain\u0101ms {\u00a0 <b> \/\/ vairs nav statiska klase<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 priv\u0101tais fin\u0101ls <b> T<\/b> objekts;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 publisks nemain\u012bgs(<b> T<\/b> arg) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 theObject = makeClone(arg);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 publiski <b> T<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezt makeClone(Objekts);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 publisk\u0101 klase Main\u012bgs\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... l\u012bdz\u012bgi...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>\u0160is risin\u0101jums ir saist\u012bts ar zin\u0101m\u0101m izmaks\u0101m, jo \u200b\u200bvis\u0101m iek\u0161\u0113j\u0101m klas\u0113m ir sl\u0113pta atsauce uz \u0101r\u0113j\u0101 tipa instanci, kas \u0161aj\u0101 piem\u0113r\u0101 t\u0101m nav vajadz\u012bga un netiek izmantota; sl\u0113pt\u0101 atsauce ir tikai bag\u0101\u017ea.\u00a0 Bie\u017ei vien iek\u0161\u0113j\u0101s klases tiek apvienotas ar saskarn\u0113m, lai saglab\u0101tu iek\u0161\u0113jo klasi k\u0101 norobe\u017eojo\u0161\u0101s klases priv\u0101tu ievie\u0161anas deta\u013cu.\u00a0 M\u0113s varam dar\u012bt to pa\u0161u \u0161eit.<\/p>\n<p>Piem\u0113rs (iepriek\u0161\u0113jais risin\u0101jums ir uzlabots):<\/p>\n<blockquote><p><tt> klases Iesai\u0146ot\u0101js<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 priv\u0101tais fin\u0101ls <b> <span style=\"color:#000099;\"> T<\/span> <\/b> objekts;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 publiskais iesai\u0146ot\u0101js(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) {Objekts = t; }<\/tt><br \/>\n<tt> \u00a0 publiski <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { return theObject; }<\/tt><tt> \u00a0 publisks Main\u012bgs<b> &lt;T&gt;<\/b> makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return this.new Mutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 publisks Nemain\u012bgs<b> &lt;T&gt;<\/b> makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return this.new Immutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u0101ts statisks &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 <b> publiskais interfeiss <\/b> Nemain\u0101ms&lt;S&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 S getWrappedItem();<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 <b> publiskais interfeiss <\/b> Mutable&lt;S&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 S getWrappedItem();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 void setWrappedItem(S arg);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 <b> priv\u0101ts<\/b> beigu klase Nemain\u0101maIevie\u0161ana <b> ievie\u0161 Immutable&lt;T&gt;<\/b> {\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 priv\u0101ts fin\u0101ls T theObject;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 public ImmutableImplementation(T arg) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 theObject = makeClone(arg);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 public T getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 atgriezt makeClone(Objekts);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 <b> priv\u0101ts<\/b> klase MutableImplementation <b> ievie\u0161 Mutable&lt;T&gt;<\/b> {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... l\u012bdz\u012bgi...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>K\u0101 redzat, ligzdotaj\u0101m publiskaj\u0101m saskarn\u0113m ir j\u0101b\u016bt visp\u0101r\u012bg\u0101m, savuk\u0101rt iek\u0161\u0113j\u0101s priv\u0101t\u0101s klases var izmantot iek\u013caujo\u0161\u0101s klases tipa parametru.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<table width=\"100%\" cellpadding=\"10\">\n<tbody>\n<tr valign=\"TOP\">\n<td colspan=\"2\" width=\"68%\"><b>\u00a0<\/b><\/td>\n<\/tr>\n<tr>\n<td colspan=\"2\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lai ieg\u016btu papildu inform\u0101ciju, l\u016bdzu, skatiet \u0161o FAQ: <a href=\"http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1\" rel=\"nofollow\">http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1<\/a> \u0160eit ir da\u017ei svar\u012bgi punkti \u0161aj\u0101 FAQ. Piem\u0113ri (visp\u0101r\u0113js skats): klase Pair&lt;X,Y&gt; {\u00a0 \u00a0priv\u0101ts\u00a0X vispirms; \u00a0 priv\u0101tais Y sekunde; \u00a0 publiskais p\u0101ris(X a1, Y a2) { \u00a0\u00a0\u00a0 first = a1; \u00a0\u00a0\u00a0 otrais = a2; \u00a0 } \u00a0 public X getFirst() { return first; [&hellip;]<\/p>\n","protected":false},"author":65283547,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Generics in short form","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1017],"tags":[18369,2549795,6280762],"class_list":["post-31","post","type-post","status-publish","format-standard","hentry","category-java","tag-generiskas-zales","tag-java","tag-java-sugas"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4CoHV-v","jetpack-related-posts":[{"id":2532,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d0%b2%d1%82%d0%be%d1%80%d0%b8%d1%8f%d1%82-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d1%81%d0%ba%d0%b8-%d1%81%d1%8a%d0%b1%d0%be%d1%80-%d0%b2-%d0%ba%d0%be%d0%bd%d1%81%d1%82%d0%b0%d0%bd%d1%82%d0%b8%d0%bd\/","url_meta":{"origin":31,"position":0},"title":"Otrais ekum\u0113niskais koncils Konstantinopol\u0113 (381) - Sv\u0113t\u0101 Gara doktr\u012bnas apstiprin\u0101\u0161ana","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0412\u0442\u043e\u0440\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440 \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b (381 \u0433.) \u2013 \u0443\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0447\u0435\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0421\u0432\u0435\u0442\u0438\u044f \u0414\u0443\u0445 \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0445\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u0442\u0432\u043e\u0442\u043e \u2022 \u0412\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440\u0438 \u2022 IV \u0432\u0435\u043a \u0412\u0442\u043e\u0440\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0435\u0437 381 \u0433. \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b, \u0435 \u0435\u0434\u043d\u043e \u043e\u0442 \u043d\u0430\u0439-\u0432\u0430\u0436\u043d\u0438\u0442\u0435 \u0441\u044a\u0431\u0438\u0442\u0438\u044f \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044f\u0442\u0430 \u043d\u0430 \u0440\u0430\u043d\u043d\u043e\u0442\u043e \u0445\u0440\u0438\u0441\u0442\u0438\u044f\u043d\u0441\u0442\u0432\u043e. \u041d\u0430 \u043d\u0435\u0433\u043e \u0435 \u043f\u043e\u0442\u0432\u044a\u0440\u0434\u0435\u043d\u0430 \u041d\u0438\u043a\u0435\u0439\u0441\u043a\u0430\u0442\u0430 \u0432\u044f\u0440\u0430 \u043e\u0442 325\u2026","rel":"","context":"In &quot;Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu&quot;","block_context":{"text":"Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/ebtppy-v5hhqxqbousaxhde8pmrm8ky9vg5zhq_i42gf-itvech_wr25ui-u_ruov2gkqenknbbx2y7ekwwxzt8559wmlq424iif_pbcon6riek_ttdbxwp75aulyh3_naxhvg_pukcmdvjs88b30esv3xgtigs1gsziujd02gs.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":3395,"url":"https:\/\/vkrastev1blog.com\/2026\/11\/08\/%d0%b8%d0%bb%d0%be%d0%bd-%d0%bc%d1%8a%d1%81%d0%ba-%d0%ba%d0%b0%d0%b7%d0%b2%d0%b0-%d1%87%d0%b5-%d0%bd%d1%8f%d0%bc%d0%b0-%d0%bd%d0%b8%d0%ba%d0%b0%d0%ba%d1%8a%d0%b2-%d0%bd%d0%b0%d1%87%d0%b8\/","url_meta":{"origin":31,"position":1},"title":"Elons Masks saka, ka \"ell\u0113 nav nek\u0101du iesp\u0113ju\" Putins zaud\u0113s karu Ukrain\u0101","author":"vkrastev2014","date":"08.11.2026","format":false,"excerpt":"\u0418\u043b\u043e\u043d \u041c\u044a\u0441\u043a \u043a\u0430\u0437\u0432\u0430, \u0447\u0435 \u201e\u043d\u044f\u043c\u0430 \u043d\u0438\u043a\u0430\u043a\u044a\u0432 \u043d\u0430\u0447\u0438\u043d \u043f\u043e \u0434\u044f\u0432\u043e\u043b\u0438\u0442\u0435\u201c \u041f\u0443\u0442\u0438\u043d \u0434\u0430 \u0437\u0430\u0433\u0443\u0431\u0438 \u0432\u043e\u0439\u043d\u0430\u0442\u0430 \u0432 \u0423\u043a\u0440\u0430\u0439\u043d\u0430 \u0422\u043e\u0432\u0430 \u0435 \u0441\u0442\u0430\u0442\u0438\u044f \u0438\u0437\u0434\u0430\u0434\u0435\u043d\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 Interesting Engineering \u0442\u0443\u043a \u0435 \u043b\u0438\u043d\u043a\u0430 Elon Musk says \u2018there is no way in hell\u2019 Putin loses the Ukraine war. \u0421\u0442\u0430\u0442\u0438\u044f\u0442\u0430 \u0435 \u043f\u0440\u0435\u0432\u0435\u0434\u0435\u043d\u0430 \u043e\u0442 \u043c\u0435\u043d\u0435 \u043e\u0442 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438 \u043d\u0430 \u0411\u044a\u043b\u0433\u0430\u0440\u0441\u043a\u0438\u2026","rel":"","context":"In &quot;Raksti par vis\u0101m p\u0101r\u0113j\u0101m t\u0113m\u0101m, kas nav galvenaj\u0101s t\u0113m\u0101s&quot;","block_context":{"text":"Raksti par vis\u0101m p\u0101r\u0113j\u0101m t\u0113m\u0101m, kas nav galvenaj\u0101s t\u0113m\u0101s","link":"https:\/\/vkrastev1blog.com\/category\/raksti-par-visam-parejam-temam-kas-nav-galvenajas-temas\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/9E5mzvPJ0QyM3PlsNgPCeG7OHFe2RtKzsF0d83s5.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":2549,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d0%bf%d0%b5%d1%82%d0%b8%d1%8f%d1%82-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d1%81%d0%ba%d0%b8-%d1%81%d1%8a%d0%b1%d0%be%d1%80-%d0%b2-%d0%ba%d0%be%d0%bd%d1%81%d1%82%d0%b0%d0%bd%d1%82%d0%b8%d0%bd%d0%be\/","url_meta":{"origin":31,"position":2},"title":"Piekt\u0101 Konstantinopoles ekum\u0113nisk\u0101 padome (553): tr\u012bs galvas str\u012bdi, Halkedona teolo\u0123iskais mantojums un imperatora Justini\u0101na I politika","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u041f\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440 \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b (553 \u0433.): \u0441\u043f\u043e\u0440\u044a\u0442 \u0437\u0430 \u201e\u0422\u0440\u0438\u0442\u0435 \u0433\u043b\u0430\u0432\u0438\u201c, \u0431\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u0441\u043a\u043e\u0442\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u043e \u043d\u0430 \u0425\u0430\u043b\u043a\u0438\u0434\u043e\u043d \u0438 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430\u0442\u0430 \u043d\u0430 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u042e\u0441\u0442\u0438\u043d\u0438\u0430\u043d I \u0420\u0435\u0437\u044e\u043c\u0435: \u041f\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u0442\u043e \u0412\u0442\u043e\u0440\u0438\u044f \u0441\u044a\u0431\u043e\u0440 \u0432 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b, \u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0436\u0434\u0430 \u043f\u0440\u0435\u0437 553 \u0433. \u043f\u043e \u0432\u0440\u0435\u043c\u0435 \u043d\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u042e\u0441\u0442\u0438\u043d\u0438\u0430\u043d I. \u041d\u0435\u0433\u043e\u0432\u0430\u0442\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430 \u0446\u0435\u043b \u0435 \u0434\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u2026","rel":"","context":"In &quot;Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu&quot;","block_context":{"text":"Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_51_20-pm.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":3660,"url":"https:\/\/vkrastev1blog.com\/2026\/11\/13\/%d0%b8%d0%b7%d0%ba%d1%83%d1%81%d1%82%d0%b2%d0%b5%d0%bd%d0%b8%d1%8f%d1%82-%d0%b8%d0%bd%d1%82%d0%b5%d0%bb%d0%b5%d0%ba%d1%82-ai-agi-%d0%b8-%d0%b1%d1%8a%d0%b4%d0%b5%d1%89%d0%b5%d1%82%d0%be-%d0%bd%d0%b0\/","url_meta":{"origin":31,"position":3},"title":"M\u0100KSL\u012aGAIS INTELEKTS AI, AGI UN CILV\u0112CES N\u0100KOTNE: KAD MA\u0160\u012aNAS SAsniegs CILV\u0112KA INTELEKTU UN VAI T\u0100S VAR IEG\u016aT APZI\u0145U, DV\u0112SELI UN BR\u012aVU GRIBU","author":"vkrastev2014","date":"13.11.2026","format":false,"excerpt":"\u0418\u0417\u041a\u0423\u0421\u0422\u0412\u0415\u041d\u0418\u042f\u0422 \u0418\u041d\u0422\u0415\u041b\u0415\u041a\u0422 AI, AGI \u0418 \u0411\u042a\u0414\u0415\u0429\u0415\u0422\u041e \u041d\u0410 \u0427\u041e\u0412\u0415\u0427\u0415\u0421\u0422\u0412\u041e\u0422\u041e: \u041a\u041e\u0413\u0410 \u041c\u0410\u0428\u0418\u041d\u0418\u0422\u0415 \u0429\u0415 \u0414\u041e\u0421\u0422\u0418\u0413\u041d\u0410\u0422 \u0427\u041e\u0412\u0415\u0428\u041a\u0418\u042f \u0418\u041d\u0422\u0415\u041b\u0415\u041a\u0422 \u0418 \u041c\u041e\u0413\u0410\u0422 \u041b\u0418 \u0414\u0410 \u041f\u0420\u0418\u0414\u041e\u0411\u0418\u042f\u0422 \u0421\u042a\u0417\u041d\u0410\u041d\u0418\u0415, \u0414\u0423\u0428\u0410 \u0418 \u0421\u0412\u041e\u0411\u041e\u0414\u041d\u0410 \u0412\u041e\u041b\u042f? \u041d\u0430\u0443\u0447\u043d\u043e \u0438\u0437\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u0442\u043e \u043d\u0430 \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u043b\u0435\u043a\u0442, \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0438\u0442\u0435 \u0437\u0430 \u0441\u044a\u0437\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0438\u0437\u043a\u0443\u0441\u0442\u0432\u0435\u043d \u043e\u0431\u0449 \u0438\u043b\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u043d\u0442\u0435\u043b\u0435\u043a\u0442 (AGI) \u0438 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0441\u043a\u0438\u0442\u0435, \u043d\u0435\u0432\u0440\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0438\u0442\u0435 \u0438 \u0431\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u0441\u043a\u0438\u0442\u0435 \u0432\u044a\u043f\u0440\u043e\u0441\u0438 \u0437\u0430 \u043f\u0440\u0438\u0440\u043e\u0434\u0430\u0442\u0430 \u043d\u0430\u2026","rel":"","context":"In &quot;MI &amp; Roboti &amp; Kosmoss &amp; Tehnolo\u0123ijas&quot;","block_context":{"text":"MI &amp; Roboti &amp; Kosmoss &amp; Tehnolo\u0123ijas","link":"https:\/\/vkrastev1blog.com\/category\/mi-roboti-kosmoss-tehnologijas\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/11\/AI-and-Faith-at-Dawn.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":657,"url":"https:\/\/vkrastev1blog.com\/2024\/10\/19\/%d0%bc%d0%be%d1%8f-%d0%bf%d0%be%d0%b3%d0%bb%d0%b5%d0%b4-%d0%b7%d0%b0-%d0%b1%d0%be%d0%b3-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d1%85%d1%80%d0%b8%d1%81%d1%82%d0%be%d1%81\/","url_meta":{"origin":31,"position":4},"title":"Mans skat\u012bjums uz Dievu, B\u012bbeli un Kristu","author":"vkrastev2014","date":"19.10.2024","format":false,"excerpt":"\u0418\u043a\u043e\u043d\u0430 \u043d\u0430 \u0418\u0441\u0443\u0441 \u0425\u0440\u0438\u0441\u0442\u043e\u0441 \u0417\u0434\u0440\u0430\u0432\u0435\u0439\u0442\u0435 \u0438\u0441\u043a\u0430\u043c \u0434\u0430 \u0441\u043f\u043e\u0434\u0435\u043b\u044f \u043c\u043e\u0438\u0442\u0435 \u0440\u0430\u0437\u0441\u044a\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a \u0437\u0430 \u0411\u043e\u0433 \u0438 \u0437\u0430 \u0425\u0440\u0438\u0441\u0442\u043e\u0441. \u0410\u0437 \u0441\u044a\u043c \u043d\u043e\u0432 \u0432\u044a\u0432 \u0432\u044f\u0440\u0430\u0442\u0430 \u0438 \u0442\u0435\u043f\u044a\u0440\u0432\u0430 \u043c\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438 \u0434\u0430 \u0443\u0447\u0430 \u043f\u043e\u0432\u0435\u0447\u0435 \u0437\u0430 \u0411\u043e\u0433. \u041e\u043f\u0438\u0442\u0432\u0430\u043c \u0441\u0438 \u0434\u0430 \u0441\u0438 \u043e\u0431\u044f\u0441\u043d\u044f \u043d\u0435\u0449\u0430\u0442\u0430 \u043a\u0430\u0442\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u043a \u0438 \u0438\u043d\u0436\u0438\u043d\u0435\u0440 \u043d\u043e \u0441\u0438 \u043c\u0438\u0441\u043b\u044f, \u0447\u0435 \u0447\u043e\u0432\u0435\u0448\u043a\u0438\u044f \u043c\u043e\u0437\u044a\u043a \u043d\u0435 \u043c\u043e\u0436\u0435 \u0434\u0430\u2026","rel":"","context":"In &quot;Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu&quot;","block_context":{"text":"Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2024\/10\/image-4.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2537,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d1%82%d1%80%d0%b5%d1%82%d0%b8%d1%8f%d1%82-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d1%81%d0%ba%d0%b8-%d1%81%d1%8a%d0%b1%d0%be%d1%80-%d0%b2-%d0%b5%d1%84%d0%b5%d1%81-431-%d0%b3-%d1%85%d1%80%d0%b8%d1%81\/","url_meta":{"origin":31,"position":5},"title":"Tre\u0161ais Efesas ekum\u0113niskais koncils (431): Kristolo\u0123iskais str\u012bds starp Aleksandrijas Kirilu un Nestoriju un Dieva M\u0101tes doktr\u012bnas apstiprin\u0101jums","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440 \u0432 \u0415\u0444\u0435\u0441 (431 \u0433.): \u0445\u0440\u0438\u0441\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0438\u044f\u0442 \u0441\u043f\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u041a\u0438\u0440\u0438\u043b \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0438\u0439\u0441\u043a\u0438 \u0438 \u041d\u0435\u0441\u0442\u043e\u0440\u0438\u0439 \u0438 \u0443\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0443\u0447\u0435\u043d\u0438\u0435\u0442\u043e \u0437\u0430 \u0411\u043e\u0433\u043e\u0440\u043e\u0434\u0438\u0446\u0430 \u041d\u0430\u0443\u0447\u043d\u043e-\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e \u0438 \u0431\u043e\u0433\u043e\u0441\u043b\u043e\u0432\u0441\u043a\u043e \u0438\u0437\u0441\u043b\u0435\u0434\u0432\u0430\u043d\u0435 \u0410\u0432\u0442\u043e\u0440: \u0412\u0435\u043b\u0438\u0441\u043b\u0430\u0432 \u041a\u0440\u044a\u0441\u0442\u0435\u0432\u0422\u0435\u043c\u0430: \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0430 \u0440\u0430\u043d\u043d\u0430\u0442\u0430 \u0426\u044a\u0440\u043a\u0432\u0430 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043d\u0430 \u0445\u0440\u0438\u0441\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u0442\u0430 \u0434\u043e\u0433\u043c\u0430\u0442\u0438\u043a\u0430\u041f\u0435\u0440\u0438\u043e\u0434: 428\u2013451 \u0433.\u041e\u0441\u043d\u043e\u0432\u043d\u043e \u0441\u044a\u0431\u0438\u0442\u0438\u0435: \u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u0415\u0444\u0435\u0441, 431 \u0433. \u0420\u0435\u0437\u044e\u043c\u0435 \u0422\u0440\u0435\u0442\u0438\u044f\u0442 \u0432\u0441\u0435\u043b\u0435\u043d\u0441\u043a\u0438 \u0441\u044a\u0431\u043e\u0440, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u2026","rel":"","context":"In &quot;Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu&quot;","block_context":{"text":"Raksti, kas velt\u012bti B\u012bbelei un par garu un miesu","link":"https:\/\/vkrastev1blog.com\/category\/%d1%81%d1%82%d0%b0%d1%82%d0%b8%d0%b8-%d0%bf%d0%be%d1%81%d0%b2%d0%b5%d1%82%d0%b5%d0%bd%d0%b8-%d0%bd%d0%b0-%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d1%8f%d1%82%d0%b0-%d0%b8-%d0%b7%d0%b0-%d0%b4%d1%83%d1%85%d0%b0\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/chatgpt-image-oct-2-2026-08_12_12-pm.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/31","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/users\/65283547"}],"replies":[{"embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/comments?post=31"}],"version-history":[{"count":8,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/31\/revisions"}],"predecessor-version":[{"id":42,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/posts\/31\/revisions\/42"}],"wp:attachment":[{"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/media?parent=31"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/categories?post=31"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vkrastev1blog.com\/wp-json\/wp\/v2\/tags?post=31"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}