{"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 generikus magyar\u00e1zata r\u00f6viden, p\u00e9ld\u00e1kkal"},"content":{"rendered":"<p>Tov\u00e1bbi inform\u00e1ci\u00f3\u00e9rt tekintse meg ezt a GYIK-ot:<\/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>\u00cdme, r\u00f6viden n\u00e9h\u00e1ny fontos pont ebb\u0151l a GYIK-b\u0151l.<\/p>\n<p>P\u00e9lda (\u00e1ltal\u00e1nos t\u00edpusra):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Pair&lt;X,Y&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t X el\u0151sz\u00f6r;<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t Y m\u00e1sodperc;<\/tt><tt> \u00a0 nyilv\u00e1nos p\u00e1r(X a1, Y a2) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 els\u0151 = a1;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 m\u00e1sodik = 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>Az oszt\u00e1ly <tt> P\u00e1r<\/tt> k\u00e9t t\u00edpus\u00fa param\u00e9terrel rendelkezik <tt> X <\/tt> \u00e9s <tt> Y<\/tt> .\u00a0 Ezeket t\u00edpus argumentumokkal helyettes\u00edtik, ha az \u00e1ltal\u00e1nos t\u00edpust <tt> P\u00e1r<\/tt> p\u00e9ld\u00e1nyosodik. P\u00e9ld\u00e1ul a nyilatkozatban <tt> P\u00e1r&lt;karakterl\u00e1nc, d\u00e1tum&gt;<\/tt> a t\u00edpus param\u00e9ter <tt> X<\/tt> t\u00edpus argumentum v\u00e1ltja fel <tt> H\u00far<\/tt> \u00e9s <tt> Y<\/tt> helyettes\u00edti\u00a0 <tt> D\u00e1tum<\/tt> .<br \/>\nAz azonos\u00edt\u00f3k hat\u00f3k\u00f6re <tt> X <\/tt> \u00e9s <tt> Y<\/tt> van<b> <i> <\/i> <\/b> az oszt\u00e1ly teljes defin\u00edci\u00f3ja.\u00a0 Ebben a k\u00f6rben a k\u00e9t t\u00edpus\u00fa param\u00e9ter <tt> X <\/tt> \u00e9s <tt> Y<\/tt> t\u00edpusk\u00e9nt haszn\u00e1lj\u00e1k (bizonyos megszor\u00edt\u00e1sokkal). A fenti p\u00e9ld\u00e1ban a t\u00edpusparam\u00e9terek a p\u00e9ld\u00e1nymet\u00f3dusok argumentumak\u00e9nt \u00e9s visszat\u00e9r\u00e9si t\u00edpusak\u00e9nt, valamint a p\u00e9ld\u00e1nymez\u0151k t\u00edpusaik\u00e9nt haszn\u00e1latosak.<br \/>\nA t\u00edpusparam\u00e9terek korl\u00e1tokkal deklar\u00e1lhat\u00f3k. A korl\u00e1tok hozz\u00e1f\u00e9r\u00e9st biztos\u00edtanak a type param\u00e9ter \u00e1ltal jelzett ismeretlen t\u00edpus\u00fa met\u00f3dusokhoz. P\u00e9ld\u00e1nkban nem h\u00edvunk meg semmilyen ismeretlen t\u00edpus\u00fa met\u00f3dust <tt> X <\/tt> \u00e9s <tt> Y<\/tt> . Emiatt a k\u00e9t t\u00edpusparam\u00e9ter korl\u00e1tlan.<\/p>\n<p>P\u00e9lda (konkr\u00e9t param\u00e9terezett t\u00edpusra):<\/p>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> P\u00e1r&lt;String,Long&gt;<\/span> <\/b> p\u00e1r) {<\/tt><br \/>\n<tt> \u00a0 System.out.println(\"(\"+pair.getFirst()+\",\"+pair.getSecond()+\")\");<\/tt><br \/>\n<tt> }<\/tt><tt> <b> <span style=\"color:#000099;\"> P\u00e1r&lt;String,Long&gt;<\/span> <\/b> limit = \u00faj <b> <span style=\"color:#000099;\"> P\u00e1r&lt;String,Long&gt;<\/span> <\/b> (\"maximum\", 1024L);<\/tt><br \/>\n<tt> printPair(limit);<\/tt><\/p><\/blockquote>\n<p>P\u00e9lda (a helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpusra):<\/p>\n<blockquote>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> Pair&lt;?,?&gt;<\/span> <\/b> p\u00e1r) {<\/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> limit = \u00faj <b> <span style=\"color:#000099;\"> P\u00e1r&lt;String,Long&gt;<\/span> <\/b> (\"maximum\", 1024L);<\/tt><br \/>\n<tt> printPair(limit);<\/tt><\/p><\/blockquote>\n<\/blockquote>\n<p>Egy \u00e1ltal\u00e1nos t\u00edpus minden p\u00e9ld\u00e1nya ugyanazt a fut\u00e1sidej\u0171 t\u00edpus\u00e1br\u00e1zol\u00e1st haszn\u00e1lja, nevezetesen a nyers t\u00edpus reprezent\u00e1ci\u00f3j\u00e1t. P\u00e9ld\u00e1ul egy \u00e1ltal\u00e1nos t\u00edpus p\u00e9ld\u00e1nyai <tt> Lista<\/tt> , mint pl <tt> List&lt;Date&gt;<\/tt> , <tt> List&lt;String&gt;<\/tt> , <tt> List&lt;Long&gt;<\/tt> stb. k\u00fcl\u00f6nb\u00f6z\u0151 statikus t\u00edpusokkal rendelkeznek a ford\u00edt\u00e1si id\u0151ben, de ugyanaz a dinamikus t\u00edpus <tt> Lista <\/tt> fut\u00e1sid\u0151ben.<\/p>\n<p>A szereposzt\u00e1s k\u00e9t r\u00e9szb\u0151l \u00e1ll:<\/p>\n<ul>\n<li>a ford\u00edt\u00f3 \u00e1ltal a ford\u00edt\u00e1si id\u0151ben v\u00e9grehajtott statikus t\u00edpusellen\u0151rz\u00e9s \u00e9s<\/li>\n<li>a virtu\u00e1lis g\u00e9p \u00e1ltal fut\u00e1s k\u00f6zben v\u00e9grehajtott dinamikus t\u00edpusellen\u0151rz\u00e9s.<\/li>\n<\/ul>\n<p>A statikus r\u00e9sz kiv\u00e1logatja az \u00e9rtelmetlen szereposzt\u00e1sokat, amelyek nem siker\u00fclhetnek, mint p\u00e9ld\u00e1ul a szereposzt\u00e1s <tt> H\u00far<\/tt> hogy <tt> D\u00e1tum<\/tt> vagy t\u0151l <tt> List&lt;String&gt;<\/tt> hogy <tt> List&lt;Date&gt;<\/tt> .<\/p>\n<p>A dinamikus r\u00e9sz a fut\u00e1sidej\u0171 t\u00edpusinform\u00e1ci\u00f3kat haszn\u00e1lja, \u00e9s fut\u00e1s k\u00f6zben t\u00edpusellen\u0151rz\u00e9st hajt v\u00e9gre.\u00a0 Felveti a <tt> ClassCastException<\/tt> ha az objektum dinamikus t\u00edpusa nem a leadott c\u00e9lt\u00edpusa (vagy a c\u00e9lt\u00edpus alt\u00edpusa). P\u00e9ld\u00e1k a dinamikus r\u00e9sszel rendelkez\u0151 dob\u00e1sokra a cast from <tt> Objektum<\/tt> hogy <tt> H\u00far<\/tt> vagy t\u0151l <tt> Objektum<\/tt> hogy <tt> List&lt;String&gt;<\/tt> .\u00a0 Ezek az \u00fagynevezett downcastok, a szupert\u00edpust\u00f3l az alt\u00edpusig.<\/p>\n<p>P\u00e9ld\u00e1k a konkr\u00e9t param\u00e9terezett t\u00edpusokra <tt> List&lt;String&gt;<\/tt> , <tt> Map&lt;String,Date&gt;<\/tt> , de nem <tt> List&lt;? kiterjeszti Number&gt;<\/tt> vagy <tt> Map&lt;String,?&gt;<\/tt> .<\/p>\n<p>N\u00e9ha v\u00e1rhat\u00f3, hogy a <tt> List&lt;Object&gt;<\/tt> szupert\u00edpusa lenne a <tt> List&lt;String&gt;<\/tt> , mert <tt> Objektum<\/tt> egy szupert\u00edpusa <tt> H\u00far<\/tt> .\u00a0 Ez az elv\u00e1r\u00e1s abb\u00f3l a t\u00e9nyb\u0151l fakad, hogy l\u00e9tezik ilyen t\u00edpus\u00fa kapcsolat a t\u00f6mb\u00f6kn\u00e9l:\u00a0 <tt> Objektum[]<\/tt> egy szupert\u00edpusa <tt> H\u00far[]<\/tt> , mert <tt> Objektum<\/tt> egy szupert\u00edpusa <tt> H\u00far<\/tt> . (Ez a fajta kapcsolat az \u00fagynevezett <i> kovariancia<\/i> .) A komponenst\u00edpusok szuper-alt\u00edpus-kapcsolata kiterjed a megfelel\u0151 t\u00f6mbt\u00edpusokra. Nem l\u00e9tezik ilyen t\u00edpus\u00fa kapcsolat az \u00e1ltal\u00e1nos t\u00edpusok p\u00e9ld\u00e1nyos\u00edt\u00e1sa eset\u00e9n. (A param\u00e9terezett t\u00edpusok <i> nem<\/i> kovari\u00e1ns.)<\/p>\n<p>Az azonos \u00e1ltal\u00e1nos t\u00edpus\u00fa p\u00e9ld\u00e1nyok k\u00f6z\u00f6tti szuper-alt\u00edpus-kapcsolat hi\u00e1nya k\u00fcl\u00f6nf\u00e9le k\u00f6vetkezm\u00e9nyekkel j\u00e1r.\u00a0 \u00cdme egy p\u00e9lda.<\/p>\n<p>P\u00e9lda:<\/p>\n<p><tt> void printAll(ArrayList&lt;Object&gt; c) {<\/tt><br \/>\n<tt> \u00a0 az (O objektum: c)\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 System.out.println(o);<\/tt><br \/>\n<tt> }<\/tt><tt> ArrayList&lt;String&gt; lista = new ArrayList&lt;String&gt;();<\/tt><br \/>\n<tt> ... t\u00f6ltse ki a list\u00e1t ...<\/tt><br \/>\n<tt> printAll(lista);\u00a0\u00a0 \/\/ hiba<\/tt><\/p>\n<p>A <tt> ArrayList&lt;String&gt;<\/tt> objektum nem adhat\u00f3 \u00e1t argumentumk\u00e9nt olyan met\u00f3dusnak, amely a <tt> ArrayList&lt;Object&gt;<\/tt> mert a k\u00e9t t\u00edpus ugyanannak az \u00e1ltal\u00e1nos t\u00edpusnak a p\u00e9ld\u00e1nyos\u00edt\u00e1sa, de for <i> k\u00fcl\u00f6nb\u00f6z\u0151<\/i> t\u00edpus\u00fa argumentumokat, \u00e9s emiatt nem kompatibilisek egym\u00e1ssal.<\/p>\n<p>A konkr\u00e9t param\u00e9terezett t\u00edpusok egy \u00e1ltal\u00e1nos t\u00edpus konkr\u00e9t p\u00e9ld\u00e1nyai.\u00a0 Szinte olyanok, mint a t\u00edpusok; csak n\u00e9h\u00e1ny korl\u00e1toz\u00e1s van.\u00a0 NEM haszn\u00e1lhat\u00f3k a k\u00f6vetkez\u0151 c\u00e9lokra:<\/p>\n<ul>\n<li>t\u00f6mb\u00f6k l\u00e9trehoz\u00e1s\u00e1hoz<\/li>\n<li>kiv\u00e9telkezel\u00e9sben<\/li>\n<li>oszt\u00e1lysz\u00f3 szerint<\/li>\n<li>egy an <tt> p\u00e9ld\u00e1nya<\/tt> kifejez\u00e9s<\/li>\n<\/ul>\n<p>A konkr\u00e9t param\u00e9terezett t\u00edpus\u00fa elemeket tartalmaz\u00f3 t\u00f6mb\u00f6k illeg\u00e1lisak.<\/p>\n<p>P\u00e9lda (illeg\u00e1lis t\u00f6mbt\u00edpusra):<\/p>\n<p><tt> static void test() {<\/tt><br \/>\n<tt> \u00a0 <b> <span style=\"color:#660000;\"> P\u00e1r&lt;Integer,Integer&gt;[]<\/span> <\/b> intPairArr = \u00faj <b> <span style=\"color:#660000;\"> Pair&lt;Integer,Integer&gt;[10]<\/span> <\/b> ; <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 addElements(intPairArr);\u00a0<\/tt><br \/>\n<tt> \u00a0 Pair&lt;Integer,Integer&gt; p\u00e1r = intPairArr[1];<\/tt><br \/>\n<tt> \u00a0 Integer i = p\u00e1r.getFirst();<\/tt><br \/>\n<tt> \u00a0 pair.setSecond(i);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> static void addElements(<b> Objektum[]<\/b> objArr) {<\/tt><br \/>\n<tt> \u00a0 objArr[0] = \u00faj P\u00e1r&lt;Integer,Integer&gt;(0,0);<\/tt><br \/>\n<tt> \u00a0 objArr[1] = new Pair&lt;String,String&gt;(\"\",\"\");\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ sikertelennek kell lennie az ArrayStoreException eset\u00e9n<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<p>A ford\u00edt\u00f3 tiltja olyan t\u00f6mb\u00f6k l\u00e9trehoz\u00e1s\u00e1t, amelyek komponenst\u00edpusa konkr\u00e9t param\u00e9terezett t\u00edpus\u00fa, mint pl <tt> Pair&lt;Integer,Integer&gt;<\/tt> p\u00e9ld\u00e1nkban.\u00a0 Az el\u0151z\u0151 bejegyz\u00e9sben t\u00e1rgyaltuk, mi\u00e9rt \u00e9sszer\u0171, hogy a ford\u00edt\u00f3 min\u0151s\u00edtse a<span style=\"color:#000000;\"> <tt> P\u00e1r&lt;Integer,Integer&gt;[]<\/tt> <\/span> mint illeg\u00e1lis.\u00a0 A f\u0151 probl\u00e9ma az, hogy a ford\u00edt\u00f3nak \u00e9s a fut\u00e1sidej\u0171 rendszernek biztos\u00edtania kell, hogy egy t\u00f6mb a <i> homog\u00e9n<\/i> azonos t\u00edpus\u00fa elemek sorozata.\u00a0 Az egyik t\u00edpusellen\u0151rz\u00e9s, nevezetesen a virtu\u00e1lis g\u00e9p \u00e1ltal fut\u00e1s k\u00f6zben v\u00e9grehajtott t\u00f6mbt\u00e1r-ellen\u0151rz\u00e9s, nem \u00e9szleli egy idegen elem s\u00e9rt\u0151 beilleszt\u00e9s\u00e9t. A p\u00e9ld\u00e1ban a m\u00e1sodik beilleszt\u00e9s a <tt> addElements<\/tt> met\u00f3dus meghi\u00fasulhat, mert egy sztringp\u00e1rt adtak hozz\u00e1 az integr\u00e1l\u00e9rt\u00e9kek t\u00f6mbj\u00e9hez, de ez nem siker\u00fcl a v\u00e1rt m\u00f3don. Az okokat az el\u0151z\u0151 bejegyz\u00e9sben t\u00e1rgyaltuk.<\/p>\n<p>Ha nem haszn\u00e1lhatunk olyan t\u00f6mb\u00f6ket tartalmaz\u00f3 elemeket, amelyek t\u00edpusa egy konkr\u00e9t param\u00e9terezett t\u00edpus, akkor mit haszn\u00e1ljunk megker\u00fcl\u0151 megold\u00e1sk\u00e9nt?<\/p>\n<p>N\u00e9zz\u00fcnk meg 3 lehets\u00e9ges megold\u00e1st:<\/p>\n<ul>\n<li>nyers t\u00edpusok t\u00f6mbje<\/li>\n<li>korl\u00e1tlan helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus\u00fa t\u00f6mb<\/li>\n<li>t\u00f6mb helyett gy\u0171jtem\u00e9ny<\/li>\n<\/ul>\n<p>M\u00edg a konkr\u00e9t param\u00e9terezett t\u00edpusok t\u00f6mbjei illeg\u00e1lisak, a konkr\u00e9t param\u00e9terezett t\u00edpusok gy\u0171jtem\u00e9nye megengedett.<\/p>\n<p>A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus egy \u00e1ltal\u00e1nos t\u00edpus p\u00e9ld\u00e1nya, amelyben legal\u00e1bb egy t\u00edpus argumentum helyettes\u00edt\u0151 karakter.\u00a0 P\u00e9ld\u00e1k a helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpusokra <tt> Gy\u0171jtem\u00e9ny&lt;?&gt;<\/tt> , <tt> List&lt;? kiterjeszti Number&gt;<\/tt> , <tt> \u00d6sszehasonl\u00edt\u00f3&lt;? szuper String&gt;<\/tt> \u00e9s <tt> P\u00e1r&lt;String,?&gt;<\/tt> . A helyettes\u00edt\u0151 karakterrel param\u00e9terezett t\u00edpus t\u00edpuscsal\u00e1dot jel\u00f6l, amely egy \u00e1ltal\u00e1nos t\u00edpus konkr\u00e9t p\u00e9ld\u00e1nyait tartalmazza.\u00a0 A haszn\u00e1lt helyettes\u00edt\u0151 karakter t\u00edpusa hat\u00e1rozza meg, hogy mely konkr\u00e9t param\u00e9terezett t\u00edpusok tartoznak a csal\u00e1dba.\u00a0 P\u00e9ld\u00e1ul a helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus <tt> Gy\u0171jtem\u00e9ny&lt;?&gt;<\/tt> az \u00f6sszes p\u00e9ld\u00e1ny csal\u00e1dj\u00e1t jel\u00f6li <tt> Gy\u0171jtem\u00e9ny<\/tt> interf\u00e9sz a t\u00edpus argumentumt\u00f3l f\u00fcggetlen\u00fcl.\u00a0 A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus <tt> List&lt;? kiterjeszti Number&gt;<\/tt> az \u00f6sszes listat\u00edpus csal\u00e1dj\u00e1t jel\u00f6li, ahol az elemt\u00edpus alt\u00edpusa\u00a0 <tt> Sz\u00e1m<\/tt> .\u00a0 A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus <tt> \u00d6sszehasonl\u00edt\u00f3&lt;? szuper String&gt;<\/tt> az \u00f6sszes p\u00e9ld\u00e1ny csal\u00e1dja <tt> \u00d6sszehasonl\u00edt\u00f3<\/tt> interf\u00e9sz olyan t\u00edpus\u00fa argumentumt\u00edpusokhoz, amelyek szupert\u00edpusai <tt> H\u00far.<\/tt><\/p>\n<p><strong><em>A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus nem a szok\u00e1sos \u00e9rtelemben vett t\u00edpus (k\u00fcl\u00f6nb\u00f6zik a nem param\u00e9terezett oszt\u00e1lyt\u00f3l\/interf\u00e9szt\u0151l vagy a nyers t\u00edpust\u00f3l).<\/em> <\/strong><\/p>\n<p>A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpusok haszn\u00e1lhat\u00f3k a g\u00e9pel\u00e9shez (p\u00e9ld\u00e1ul nem param\u00e9terezett oszt\u00e1lyok \u00e9s interf\u00e9szek):<\/p>\n<ul>\n<li>mint argumentum \u00e9s visszat\u00e9r\u00e9si t\u00edpus\u00fa met\u00f3dusok<\/li>\n<li>mez\u0151 vagy helyi referenciav\u00e1ltoz\u00f3 t\u00edpusak\u00e9nt<\/li>\n<li>m\u00e1s param\u00e9terezett t\u00edpusok arrayas t\u00edpus\u00fa argumentum\u00e1nak komponenst\u00edpusak\u00e9nt<\/li>\n<li>mint c\u00e9lt\u00edpus a dob\u00e1sokban<\/li>\n<\/ul>\n<p>Nemcsak a t\u00edpusok lehetnek \u00e1ltal\u00e1nosak, hanem a m\u00f3dszerek is lehetnek \u00e1ltal\u00e1nosak. A statikus \u00e9s nem statikus met\u00f3dusoknak, valamint a konstruktoroknak lehetnek t\u00edpusparam\u00e9terei. A form\u00e1lis t\u00edpusparam\u00e9terek deklar\u00e1l\u00e1s\u00e1nak szintaxisa hasonl\u00f3 az \u00e1ltal\u00e1nos t\u00edpusok szintaxis\u00e1hoz. A t\u00edpusparam\u00e9ter szakaszt sz\u00f6gletes z\u00e1r\u00f3jelek hat\u00e1rolj\u00e1k, \u00e9s a met\u00f3dus visszat\u00e9r\u00e9si t\u00edpusa el\u0151tt jelenik meg. Szintaxisa \u00e9s jelent\u00e9se megegyezik egy \u00e1ltal\u00e1nos t\u00edpus t\u00edpusparam\u00e9ter-list\u00e1j\u00e1val.<\/p>\n<p>\u00cdme egy \u00e1ltal\u00e1nos p\u00e9lda <tt> max<\/tt> olyan m\u00f3dszer, amely a legnagyobb \u00e9rt\u00e9ket sz\u00e1m\u00edtja ki egy ismeretlen t\u00edpus\u00fa elemek gy\u0171jtem\u00e9ny\u00e9ben <tt> A<\/tt> .<\/p>\n<p>P\u00e9lda (egy \u00e1ltal\u00e1nos m\u00f3dszerre):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Gy\u0171jtem\u00e9nyek {<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos statikus <b> <span style=\"color:#000099;\"> Az &lt;A kiterjeszti \u00d6sszehasonl\u00edthat\u00f3&lt;A&gt;&gt; A<\/span> <\/b> max(Gy\u0171jtem\u00e9ny&lt;<b> <span style=\"color:#000099;\"> A<\/span> <\/b> &gt; xs) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Iterator&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 if (w.hasonl\u00edtsa \u00f6ssze(x) &lt; 0) w = x;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 return w;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p><\/blockquote>\n<p>A <tt> max<\/tt> A met\u00f3dusnak egy t\u00edpusparam\u00e9tere van, a neve<tt> A<\/tt> .\u00a0 Ez a gy\u0171jtem\u00e9ny azon elemt\u00edpus\u00e1nak hely\u0151rz\u0151je, amelyen a met\u00f3dus m\u0171k\u00f6dik. A type param\u00e9ternek van korl\u00e1tja; olyan t\u00edpusnak kell lennie, amely alt\u00edpusa <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;A&gt;<\/tt><\/p>\n<p>P\u00e9lda (ez\u00fattal ugyanabb\u00f3l az \u00e1ltal\u00e1nos t\u00edpusb\u00f3l <i> -vel<\/i> hat\u00e1rok):<\/p>\n<blockquote><p><tt> nyilv\u00e1nos fel\u00fclet \u00d6sszehasonl\u00edthat\u00f3&lt;T&gt; {<\/tt><br \/>\n<tt> \u00a0 public int \u00d6sszehasonl\u00edtTo(T arg);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> nyilv\u00e1nos oszt\u00e1ly TreeMap&lt;Key <b> <span style=\"color:#000066;\"> kiterjeszti Comparable&lt;Key&gt;<\/span> <\/b> ,Data&gt;{<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t statikus oszt\u00e1ly Entry&lt;K,V&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 K gomb;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 V \u00e9rt\u00e9k;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; balra = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; jobb = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; sz\u00fcl\u0151;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t tranziens Entry&lt;Key,Data&gt; gy\u00f6k\u00e9r = null;<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t Entry&lt;Key,Data&gt; getEntry(Kulcskulcs) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;Key,Data&gt; p = gy\u00f6k\u00e9r;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Kulcs k = kulcs;<\/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;\"> \u00f6sszehasonl\u00edt\u00e1s(p.kulcs)<\/span> <\/b> ;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (cmp == 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return p;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 k\u00fcl\u00f6nben ha (cmp &lt; 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.bal;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 m\u00e1s\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.jobb;\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 public logikai \u00e9rt\u00e9k tartalmazzaKey(Kulcskulcs) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 return getEntry(kulcs) != null;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>A fenti p\u00e9ld\u00e1ban a t\u00edpus param\u00e9ter <tt> Kulcsfontoss\u00e1g\u00fa<\/tt> megvan a k\u00f6tve <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;Key&gt;<\/tt> .\u00a0 A k\u00f6t\u00e9s megad\u00e1s\u00e1nak k\u00e9t hat\u00e1sa van:<\/p>\n<ul>\n<li><i> Hozz\u00e1f\u00e9r\u00e9st biztos\u00edt a korl\u00e1t \u00e1ltal meghat\u00e1rozott met\u00f3dusokhoz<\/i> .\u00a0 A p\u00e9ld\u00e1ban a k\u00f6t\u00f6tt <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;Key&gt; <\/tt> hozz\u00e1f\u00e9r\u00e9st biztos\u00edt a <tt> \u00f6sszehasonl\u00edtani<\/tt> m\u00f3dszer, amelyet meg akarunk h\u00edvni a mi megval\u00f3s\u00edt\u00e1sunk sor\u00e1n <tt> TreeMap<\/tt> oszt\u00e1ly.<\/li>\n<\/ul>\n<ul>\n<li><i> Csak a &#8220;hat\u00e1rokon bel\u00fcl&#8221; t\u00edpusok haszn\u00e1lhat\u00f3k az \u00e1ltal\u00e1nos t\u00edpus p\u00e9ld\u00e1nyos\u00edt\u00e1s\u00e1ra.<\/i> \u00a0 A p\u00e9ld\u00e1ban egy param\u00e9terezett t\u00edpus, mint pl <tt> TreeMap&lt;Number,String&gt;<\/tt> elutas\u00edt\u00e1sra ker\u00fclne, mert a t\u00edpus <tt> Sz\u00e1m<\/tt> nem alt\u00edpusa <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;Sz\u00e1m&gt;<\/tt> .\u00a0 Param\u00e9terezett t\u00edpus, mint pl <tt> TreeMap&lt;String,String&gt;<\/tt> elfogadn\u00e1nk, mert a String t\u00edpus a hat\u00e1rokon bel\u00fcl van, azaz alt\u00edpusa <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;String&gt;<\/tt> .<\/li>\n<\/ul>\n<p>Minden oszt\u00e1ly, interf\u00e9sz \u00e9s enum t\u00edpus haszn\u00e1lhat\u00f3 t\u00edpusparam\u00e9terhez k\u00f6t\u00f6ttk\u00e9nt, bele\u00e9rtve a be\u00e1gyazott \u00e9s a bels\u0151 t\u00edpusokat is.\u00a0 Sem primit\u00edv t\u00edpusok, sem t\u00f6mbt\u00edpusok nem haszn\u00e1lhat\u00f3k t\u00edpusparam\u00e9ter-k\u00f6t\u00e9sk\u00e9nt.<\/p>\n<p>P\u00e9ld\u00e1k (t\u00edpusparam\u00e9ter korl\u00e1tokra):<\/p>\n<blockquote><p><tt> oszt\u00e1ly X0 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> int<\/span> <\/b> &gt; { ... }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> oszt\u00e1ly X1 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> Objektum[]<\/span> <\/b> &gt; { ... } <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> oszt\u00e1ly X2 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> Sz\u00e1m<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X3 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> H\u00far<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X4 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> Futhat\u00f3<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X5 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> Menet.\u00c1llam<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X6 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> Lista<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X7 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> List&lt;String&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X8 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> List&lt;? kiterjeszti Number&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X9 &lt;T kiterjeszti <b> <span style=\"color:#000099;\"> \u00d6sszehasonl\u00edthat\u00f3&lt;? szuper sz\u00e1m&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> oszt\u00e1ly X10&lt;T kiterjeszti <b> <span style=\"color:#000099;\"> T\u00e9rk\u00e9p.Entry&lt;?,?&gt;<\/span> <\/b> &gt; { ... }<\/tt><\/p><\/blockquote>\n<p>A k\u00f3dminta azt mutatja, hogy a primit\u00edv t\u00edpusok, mint pl <tt> int<\/tt> \u00e9s t\u00f6mbt\u00edpusok, mint pl <tt> Objektum[] <\/tt> t\u00edpusparam\u00e9terhez k\u00f6t\u00f6ttk\u00e9nt nem enged\u00e9lyezettek.<\/p>\n<p>Az oszt\u00e1lyt\u00edpusok, mint pl <tt> Sz\u00e1m<\/tt> vagy <tt> H\u00far<\/tt> , \u00e9s interf\u00e9szt\u00edpusok, mint pl <tt> Futhat\u00f3<\/tt> , t\u00edpus param\u00e9terhez k\u00f6t\u00f6tt.<\/p>\n<p>Enum t\u00edpusok, mint pl <tt> Menet.\u00c1llam<\/tt> t\u00edpusparam\u00e9terhez k\u00f6t\u00f6ttk\u00e9nt is megengedettek. <tt> Menet.\u00c1llam<\/tt> egy p\u00e9lda egy be\u00e1gyazott t\u00edpusra, amelyet t\u00edpusparam\u00e9ter-k\u00f6t\u00e9sk\u00e9nt haszn\u00e1lnak.\u00a0 Nem statikus bels\u0151 t\u00edpusok is megengedettek.<\/p>\n<p>A nyers t\u00edpusok t\u00edpusparam\u00e9terhez k\u00f6t\u00f6ttekk\u00e9nt megengedettek; <tt> <span style=\"color:#000000;\"> Lista<\/span> <\/tt> egy p\u00e9lda.<\/p>\n<p>A param\u00e9terezett t\u00edpusok t\u00edpusparam\u00e9terhez k\u00f6t\u00f6ttk\u00e9nt enged\u00e9lyezettek, bele\u00e9rtve a konkr\u00e9t param\u00e9terezett t\u00edpusokat is, mint pl <tt> List&lt;String&gt;<\/tt> , korl\u00e1tos helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpusok, mint pl <tt> List&lt;? kiterjeszti Number&gt;<\/tt> \u00e9s <tt> \u00d6sszehasonl\u00edthat\u00f3&lt;? szuper Long&gt;<\/tt> , \u00e9s a korl\u00e1tlan helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpusok, mint pl <tt> T\u00e9rk\u00e9p.Entry&lt;?,?&gt;<\/tt> .\u00a0 A helyettes\u00edt\u0151 karakterrel param\u00e9terezett k\u00f6t\u00e9s t\u00edpus argumentumk\u00e9nt minden olyan t\u00edpust enged\u00e9lyez, amely ahhoz a t\u00edpuscsal\u00e1dhoz tartozik, amelyet a helyettes\u00edt\u0151 karakter jel\u00f6l.\u00a0 A helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpuskorl\u00e1t csak korl\u00e1tozott hozz\u00e1f\u00e9r\u00e9st biztos\u00edt a mez\u0151kh\u00f6z \u00e9s met\u00f3dusokhoz; a korl\u00e1toz\u00e1sok a helyettes\u00edt\u0151 karakter t\u00edpus\u00e1t\u00f3l f\u00fcggenek.<\/p>\n<p>P\u00e9lda (a helyettes\u00edt\u0151 karakterrel param\u00e9terezett t\u00edpus t\u00edpusparam\u00e9terhez k\u00f6t\u00f6tt):<\/p>\n<blockquote><p><tt> X&lt; oszt\u00e1ly<b> <span style=\"color:#000099;\"> T kiterjeszti a List&lt;-t? kiterjeszti 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;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 n sz\u00e1m = t.remove(0);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> oszt\u00e1ly teszt {<\/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;\"> Hossz\u00fa<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x1 = \u00faj 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;\"> H\u00far<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x2 = \u00faj X&lt;ArrayList&lt;String&gt;&gt;(); <\/span> <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>T\u00edpus\u00fa referenciav\u00e1ltoz\u00f3k<tt> T <\/tt> (a t\u00edpusparam\u00e9ter) a helyettes\u00edt\u0151 karakter t\u00edpus\u00fa referenciav\u00e1ltoz\u00f3kk\u00e9nt kezelend\u0151k (a t\u00edpusparam\u00e9ter k\u00f6t\u00f6tt).\u00a0 P\u00e9ld\u00e1nkban ennek az a k\u00f6vetkezm\u00e9nye, hogy a ford\u00edt\u00f3 elutas\u00edtja olyan met\u00f3dusok megh\u00edv\u00e1s\u00e1t, amelyek a type param\u00e9ter \u00e1ltal jelzett &#8220;ismeretlen&#8221; t\u00edpus\u00fa argumentumot veszik fel, mint pl. <tt> List.add<\/tt> , mert a korl\u00e1t helyettes\u00edt\u0151 karakterekkel param\u00e9terezett t\u00edpus fels\u0151 korl\u00e1ttal.<br \/>\nUgyanakkor a k\u00f6t\u00f6tt <tt> List&lt;? kiterjeszti Number&gt;<\/tt> meghat\u00e1rozza a t\u00edpus argumentumk\u00e9nt haszn\u00e1lhat\u00f3 t\u00edpusokat. A ford\u00edt\u00f3 minden t\u00edpus\u00fa argumentumot elfogad, amely a t\u00edpuscsal\u00e1dhoz tartozik <tt> List&lt;? kiterjeszti Number&gt;<\/tt> , azaz minden alt\u00edpusa <tt> Lista<\/tt> t\u00edpus argumentummal, amely alt\u00edpusa <tt> Sz\u00e1m<\/tt> .<\/p>\n<p>Egy t\u00edpusparam\u00e9ter egy m\u00e1sik t\u00edpusparam\u00e9ter korl\u00e1tjak\u00e9nt haszn\u00e1lhat\u00f3.<\/p>\n<p>P\u00e9lda (t\u00edpusparam\u00e9ter k\u00f6t\u00e9sk\u00e9nt haszn\u00e1lt t\u00edpusparam\u00e9terre):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Tripla<b> &lt;T&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t T fst, snd, trd;<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos &lt;<b> U<\/b> <b> <span style=\"color:#000099;\"> kiterjeszti T<\/span> <\/b> , <b> V <span style=\"color:#000099;\"> kiterjeszti T<\/span> <\/b> , <b> W <span style=\"color:#000099;\"> kiterjeszti 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>Ebben a p\u00e9ld\u00e1ban a t\u00edpus param\u00e9ter <tt> T<\/tt> a param\u00e9terezett oszt\u00e1lyt haszn\u00e1ljuk a t\u00edpusparam\u00e9terek korl\u00e1tjak\u00e9nt <tt> U<\/tt> ,\u00a0 <tt> V<\/tt> \u00e9s <tt> W<\/tt> az adott oszt\u00e1ly param\u00e9terezett p\u00e9ld\u00e1nymet\u00f3dus\u00e1nak.<\/p>\n<p>Tov\u00e1bbi lehet\u0151s\u00e9gek a t\u00edpusparam\u00e9terek m\u00e1s t\u00edpusparam\u00e9terek hat\u00e1rak\u00e9nt t\u00f6rt\u00e9n\u0151 haszn\u00e1lat\u00e1ra olyan helyzetekben, amikor egy be\u00e1gyazott t\u00edpust egy \u00e1ltal\u00e1nos t\u00edpuson bel\u00fcl, vagy egy helyi oszt\u00e1lyt egy \u00e1ltal\u00e1nos met\u00f3duson bel\u00fcl hat\u00e1roznak meg.\u00a0 M\u00e9g az is megengedett, hogy egy t\u00edpusparam\u00e9tert egy m\u00e1sik t\u00edpusparam\u00e9terhez k\u00f6tve ugyanabban a t\u00edpusparam\u00e9ter r\u00e9szben.<\/p>\n<p>Egy oszt\u00e1lynak min\u0151s\u00fcl\u0151 k\u00f6t\u00e9s hozz\u00e1f\u00e9r\u00e9st biztos\u00edt minden nyilv\u00e1nos tagj\u00e1hoz, azaz nyilv\u00e1nos mez\u0151ihez, met\u00f3dusaihoz \u00e9s be\u00e1gyazott t\u00edpusaihoz. Csak a konstruktorok nem \u00e9rhet\u0151k el, mert nincs garancia arra, hogy a k\u00f6t\u00e9s egy aloszt\u00e1lya ugyanazokkal a konstruktorokkal rendelkezik, mint a k\u00f6t\u00e9s.<\/p>\n<p>P\u00e9lda (egy t\u00edpusparam\u00e9ter k\u00f6t\u00e9sek\u00e9nt haszn\u00e1lt oszt\u00e1lyra):<\/p>\n<blockquote><p><tt> nyilv\u00e1nos oszt\u00e1ly <span style=\"color:#000000;\"> Szuperoszt\u00e1ly<\/span> {<\/tt><tt> \u00a0\u00a0\u00a0 \/\/ statikus tagok<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos enum 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 \/\/ nem statikus tagok<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public class InnerClass { ... }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public Object nonStaticField;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public void nonStaticMethod() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ konstruktorok<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public SuperClass() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ priv\u00e1t tagok<\/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> nyilv\u00e1nos v\u00e9gs\u0151 oszt\u00e1ly SomeClass&lt;T kiterjeszti <b> <span style=\"color:#006600;\"> Szuperoszt\u00e1ly<\/span> <\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 priv\u00e1t T objektum;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public SomeClass(T t) { object = t; }\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 public String toString() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 visszat\u00e9r\u00e9s<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"statikus be\u00e1gyazott t\u00edpus\u00a0\u00a0\u00a0 : \"+T.EnumType.class+\"\\n\"\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"statikus mez\u0151\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"statikus met\u00f3dus\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nem statikus be\u00e1gyazott t\u00edpus: \"+T.InnerClass.class+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nem statikus mez\u0151\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"nem statikus met\u00f3dus\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"konstruktor\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+(\u00faj T())+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ hiba<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"priv\u00e1t tag\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.privateField+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ hiba\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>A k\u00f6t\u00f6tt <tt> Szuperoszt\u00e1ly<\/tt> hozz\u00e1f\u00e9r\u00e9st biztos\u00edt be\u00e1gyazott t\u00edpusaihoz, statikus mez\u0151ihez \u00e9s met\u00f3dusaihoz, valamint nem statikus mez\u0151ihez \u00e9s met\u00f3dusaihoz.\u00a0 Csak a kivitelez\u0151 nem el\u00e9rhet\u0151.\u00a0 Ez az\u00e9rt van, mert a konstruktorok nem \u00f6r\u00f6kl\u0151dnek. Minden aloszt\u00e1ly meghat\u00e1rozza a saj\u00e1t konstruktorait, \u00e9s nem kell t\u00e1mogatnia a szuperoszt\u00e1ly konstruktorait.\u00a0 Ez\u00e9rt nincs garancia arra, hogy egy aloszt\u00e1ly <tt> Szuperoszt\u00e1ly<\/tt> ugyanolyan konstruktora lesz, mint a szuperoszt\u00e1ly\u00e1nak.<\/p>\n<p>A kontextus, amelyben<tt> Az Enum&lt;E kiterjeszti az Enum&lt;E&gt;&gt;-t<\/tt> &#8221; jelenik meg a nyilatkozata <tt> Enum<\/tt> oszt\u00e1ly csomagban <tt> java.lang<\/tt> :<\/p>\n<blockquote><p><tt> nyilv\u00e1nos absztrakt oszt\u00e1ly <b> Az Enum&lt;E kiterjeszti az Enum&lt;E&gt;&gt;-t<\/b> {<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>A t\u00edpus <tt> Enum<\/tt> az \u00f6sszes felsorol\u00e1st\u00edpus k\u00f6z\u00f6s alaposzt\u00e1lya.\u00a0 Java nyelven egy felsorol\u00e1st\u00edpus, mint pl <tt> Sz\u00edn<\/tt> oszt\u00e1lyra ford\u00edtj\u00e1k <tt> Sz\u00edn<\/tt> amely kiterjed <tt> Enum&lt;Color&gt;<\/tt> . A szuperoszt\u00e1ly c\u00e9lja <tt> Enum<\/tt> c\u00e9lja, hogy olyan funkcionalit\u00e1st biztos\u00edtson, amely minden felsorol\u00e1si t\u00edpusra jellemz\u0151.<\/p>\n<p>Itt van egy v\u00e1zlat az oszt\u00e1lyr\u00f3l <tt> Enum<\/tt> :<\/p>\n<blockquote><p><tt> nyilv\u00e1nos absztrakt oszt\u00e1ly <b> Enum&lt;<span style=\"color:#000099;\"> E<\/span> kiterjeszti Enum&lt;E&gt;&gt;<\/b> Comparable&lt; val\u00f3s\u00edtja meg<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt;, sorozhat\u00f3 {<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t v\u00e9gleges String n\u00e9v;<\/tt><br \/>\n<tt> \u00a0 public final String name() { ... }<\/tt><tt> \u00a0 private final ind ordinal;<\/tt><br \/>\n<tt> \u00a0 public final int ordinal() { ... }<\/tt><\/p>\n<p><tt> \u00a0 protected Enum(karakterl\u00e1nc neve, int sorsz\u00e1m\u00fa) { ... }<\/tt><\/p>\n<p><tt> \u00a0 public String\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 toString() { ... }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos v\u00e9gleges logikai \u00e9rt\u00e9k egyenl\u0151 (Object other) { ... }<\/tt><br \/>\n<tt> \u00a0 public final int hashCode() { ... }<\/tt><br \/>\n<tt> \u00a0 Protected final Az objektumkl\u00f3n() CloneNotSupportedException { ... }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos v\u00e9gs\u0151 int \u00d6sszehasonl\u00edt\u00e1s(<b> <span style=\"color:#000099;\"> E<\/span> <\/b> o) { ... }<\/tt><\/p>\n<p><tt> \u00a0 nyilv\u00e1nos d\u00f6nt\u0151 Class&lt;<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt; getDeclaringClass() { ... }<\/tt><br \/>\n<tt> \u00a0 public static &lt;T kiterjeszti Enum&lt;T&gt;&gt; T valueOf(Class&lt;T&gt; enumType, String name) { ... }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>A meglep\u0151 jellemz\u0151 a nyilatkozatban &#8220;<tt> Az Enum&lt;E kiterjeszti az Enum&lt;E&gt;&gt;-t<\/tt> &#8221; az a t\u00e9ny, hogy az \u00fajonnan meghat\u00e1rozott oszt\u00e1ly <tt> Enum<\/tt> \u00e9s annak \u00fajonnan defini\u00e1lt t\u00edpusparam\u00e9tere <tt> E <\/tt> azonos t\u00edpus\u00fa param\u00e9ter korl\u00e1tj\u00e1ban jelennek meg.\u00a0 Ez azt jelenti, hogy a <tt> Enum<\/tt> t\u00edpust p\u00e9ld\u00e1nyos\u00edtani kell valamelyik alt\u00edpus\u00e1hoz.\u00a0 Annak meg\u00e9rt\u00e9s\u00e9hez, hogy ennek mi\u00e9rt van \u00e9rtelme, vegy\u00fck figyelembe, hogy minden enumt\u00edpust leford\u00edtanak az alt\u00edpusba <tt> Enum<\/tt> .<\/p>\n<p>Itt van a kital\u00e1lt enum t\u00edpus <tt> Sz\u00edn<\/tt> :<\/p>\n<blockquote><p><tt> enum <b> Sz\u00edn<\/b> {PIROS, K\u00c9K, Z\u00d6LD}<\/tt><\/p><\/blockquote>\n<p>A ford\u00edt\u00f3 a k\u00f6vetkez\u0151 oszt\u00e1lyba ford\u00edtja le:<\/p>\n<blockquote><p><tt> nyilv\u00e1nos z\u00e1r\u00f3\u00f3ra <b> Sz\u00edn<\/b> kiterjed <b> Enum&lt;Color&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 public static final Sz\u00edn[] \u00e9rt\u00e9kek() { return (Sz\u00edn[])$\u00c9RT\u00c9KEK.kl\u00f3n(); }<\/tt><br \/>\n<tt> \u00a0 public static Color valueOf(String name) { ... }<\/tt><tt> \u00a0 private Color(String s, int i) { super(s, i); }<\/tt><\/p>\n<p><tt> \u00a0 nyilv\u00e1nos statikus v\u00e9gleges Sz\u00edn PIROS;<\/tt><br \/>\n<tt> \u00a0 publikus statikus v\u00e9gleges Sz\u00edn K\u00c9K;<\/tt><br \/>\n<tt> \u00a0 publikus statikus v\u00e9gleges Sz\u00edn Z\u00d6LD;<\/tt><\/p>\n<p><tt> \u00a0 priv\u00e1t statikus v\u00e9gleges Sz\u00edn $\u00c9RT\u00c9KEK[];<\/tt><\/p>\n<p><tt> \u00a0 static {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 PIROS = new Color(\"PIROS\", 0);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 K\u00c9K = new Color(\"BLUE\", 1);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Z\u00d6LD = new Color(\"Z\u00d6LD\", 2);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 $\u00c9RT\u00c9KEK = (\u00faj sz\u00edn[] { PIROS, K\u00c9K, Z\u00d6LD });<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Az \u00f6r\u00f6kl\u0151d\u00e9snek az a hat\u00e1sa, hogy a <tt> Sz\u00edn<\/tt> type \u00f6r\u00f6kli az \u00f6sszes olyan met\u00f3dust, amely a -ben implement\u00e1lt <tt> Enum&lt;Color&gt;<\/tt> .\u00a0 K\u00f6zt\u00fck van a <tt> \u00f6sszehasonl\u00edtani<\/tt> m\u00f3dszer.\u00a0 A <tt> Sz\u00edn. \u00f6sszehasonl\u00edtani<\/tt> m\u00f3dszernek val\u00f3sz\u00edn\u0171leg a <tt> Sz\u00edn<\/tt> \u00e9rvk\u00e9nt.\u00a0 Annak \u00e9rdek\u00e9ben, hogy ez megt\u00f6rt\u00e9njen, oszt\u00e1ly <tt> Enum<\/tt> \u00e1ltal\u00e1nos \u00e9s a <tt> Enum.compareTo<\/tt> m\u00f3dszert vesz ig\u00e9nybe <tt> Enum<\/tt> t\u00edpus param\u00e9tere <tt> E <\/tt> \u00e9rvk\u00e9nt.\u00a0 Ennek eredm\u00e9nyek\u00e9nt \u00edrja be <tt> Sz\u00edn<\/tt> sz\u00e1rmaz\u00f3 <tt> Enum&lt;Color&gt;<\/tt> \u00f6r\u00f6k\u00f6l a <tt> \u00f6sszehasonl\u00edtani<\/tt> m\u00f3dszer, amely a <tt> Sz\u00edn<\/tt> ahogy \u00e9s \u00e9rvel\u00e9s, pontosan \u00fagy, ahogy kell.<br \/>\nHa boncolgatjuk a nyilatkozatot&#8221;<tt> Az Enum&lt;E kiterjeszti az Enum&lt;E&gt;&gt;-t<\/tt> &#8220;L\u00e1thatjuk, hogy ennek a mint\u00e1nak t\u00f6bb aspektusa van.<\/p>\n<p>El\u0151sz\u00f6r is az a t\u00e9ny, hogy a t\u00edpusparam\u00e9ter-k\u00f6t\u00e9s maga a t\u00edpus: &#8220;<tt> <b> Enum<\/b> Az &lt;E meghosszabbodik <b> Enum<\/b> &lt;E&gt;&gt;<\/tt> &#8220;. Biztos\u00edtja, hogy csak a t\u00edpus alt\u00edpusai <tt> Enum<\/tt> t\u00edpus argumentumk\u00e9nt enged\u00e9lyezettek. (Elm\u00e9letileg \u00edrja be <tt> Enum<\/tt> \u00f6nmag\u00e1ban is p\u00e9ld\u00e1nyos\u00edthat\u00f3, mint pl <tt> Enum&lt;Enum&gt;<\/tt> , de ez term\u00e9szetesen nem sz\u00e1nd\u00e9kos, \u00e9s neh\u00e9z elk\u00e9pzelni olyan helyzetet, amelyben egy ilyen p\u00e9ld\u00e1nyos\u00edt\u00e1s hasznos lenne.)<\/p>\n<p>M\u00e1sodszor, ott van az a t\u00e9ny, hogy a param\u00e9terhez k\u00f6t\u00f6tt t\u00edpus a param\u00e9terezett t\u00edpus <tt> Enum<b> &lt;E&gt;<\/b> <\/tt> , amely a type param\u00e9tert haszn\u00e1lja <tt> E<\/tt> mint a k\u00f6t\u00f6tt t\u00edpusargumentuma. Ez a deklar\u00e1ci\u00f3 biztos\u00edtja, hogy az \u00f6r\u00f6kl\u0151d\u00e9si kapcsolat egy alt\u00edpus \u00e9s egy p\u00e9ld\u00e1nya k\u00f6z\u00f6tt fenn\u00e1ll <tt> Enum<\/tt> alak\u00fa<tt> Az X kiterjeszti az Enum&lt;X&gt;-t<\/tt> &#8220;. Egy alt\u00edpus, p\u00e9ld\u00e1ul &#8220;<tt> Az X kiterjeszti az Enum&lt;Y&gt;-t<\/tt> &#8221; nem deklar\u00e1lhat\u00f3 a type argumentum miatt <tt> Y<\/tt> nem lenne hat\u00e1rokon bel\u00fcl; csak alt\u00edpusai <tt> Enum&lt;X&gt;<\/tt> hat\u00e1rokon bel\u00fcl vannak.<\/p>\n<p>Harmadszor, ott van az a t\u00e9ny, hogy <tt> Enum<\/tt> els\u0151sorban \u00e1ltal\u00e1nos.\u00a0 Ez azt jelenti, hogy n\u00e9h\u00e1ny m\u00f3dszer az oszt\u00e1ly <tt> Enum<\/tt> vegyen egy argumentumot, vagy adjon vissza egy ismeretlen t\u00edpus\u00fa \u00e9rt\u00e9ket (vagy m\u00e1s m\u00f3don f\u00fcggj\u00f6n egy ismeretlen t\u00edpust\u00f3l). Mint m\u00e1r tudjuk, ez az ismeretlen t\u00edpus k\u00e9s\u0151bb egy alt\u00edpus lesz <tt> X<\/tt> -b\u00f3l <tt> Enum&lt;X&gt;<\/tt> .\u00a0 Ez\u00e9rt a param\u00e9terezett t\u00edpusban <tt> Enum&lt;X&gt;<\/tt> , ezek a m\u00f3dszerek az alt\u00edpust \u00e9rintik <tt> X<\/tt> , \u00e9s az alt\u00edpusba \u00f6r\u00f6kl\u0151dnek <tt> X<\/tt> .\u00a0 A <tt> \u00f6sszehasonl\u00edtani<\/tt> a m\u00f3dszer egy p\u00e9lda egy ilyen m\u00f3dszerre; a szuperoszt\u00e1lyb\u00f3l \u00f6r\u00f6kl\u0151dik minden aloszt\u00e1lyba, \u00e9s minden esetben aloszt\u00e1lyspecifikus al\u00e1\u00edr\u00e1ssal rendelkezik.<\/p>\n<p>\u00d6sszefoglalva, a nyilatkozat &#8220;<tt> Az Enum&lt;E kiterjeszti az Enum&lt;E&gt;&gt;-t<\/tt> &#8221; a k\u00f6vetkez\u0151k\u00e9ppen fejthet\u0151 meg: <tt> Enum<\/tt> egy \u00e1ltal\u00e1nos t\u00edpus, amely csak az alt\u00edpusaihoz p\u00e9ld\u00e1nyos\u00edthat\u00f3, \u00e9s ezek az alt\u00edpusok \u00f6r\u00f6k\u00f6lnek n\u00e9h\u00e1ny hasznos met\u00f3dust, amelyek k\u00f6z\u00fcl n\u00e9h\u00e1ny alt\u00edpus-specifikus argumentumokat vesz fel (vagy m\u00e1s m\u00f3don f\u00fcgg az alt\u00edpust\u00f3l).<\/p>\n<p><b>Oszt\u00e1lyok als\u00f3 korl\u00e1tos t\u00edpusparam\u00e9terei<\/b><\/p>\n<p>A t\u00edpusparam\u00e9tereknek t\u00f6bb hat\u00e1ra is lehet, p\u00e9ld\u00e1ul in <tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {...}<\/tt> . De egy t\u00edpusparam\u00e9ternek nem lehet als\u00f3 korl\u00e1tja, vagyis olyan konstrukci\u00f3, mint pl <tt> oszt\u00e1ly\u00fa Box&lt;T <b> nagy<\/b> Number&gt; {...}<\/tt> nem megengedett.\u00a0 Mi\u00e9rt ne?\u00a0 A v\u00e1lasz: \u00e9rtelmetlen, mert nem venne semmit, ha megengedn\u00e9.\u00a0 N\u00e9zz\u00fck meg, mi\u00e9rt zavar\u00f3ak az oszt\u00e1lyok als\u00f3 hat\u00e1r\u00e1nak t\u00edpusparam\u00e9terei, ha megvizsg\u00e1ljuk, mit jelent egy t\u00edpusparam\u00e9ter fels\u0151 korl\u00e1tja.<\/p>\n<p>A t\u00edpusparam\u00e9ter fels\u0151 hat\u00e1r\u00e1nak h\u00e1rom hat\u00e1sa van:<\/p>\n<ol>\n<ol>\n<li><b> <i> Korl\u00e1tozott p\u00e9ld\u00e1nyos\u00edt\u00e1s.<\/i> <\/b> A fels\u0151 korl\u00e1t korl\u00e1tozza az \u00e1ltal\u00e1nos t\u00edpus p\u00e9ld\u00e1nyos\u00edt\u00e1s\u00e1hoz haszn\u00e1lhat\u00f3 t\u00edpusk\u00e9szletet.\u00a0 Ha kijelentj\u00fck a <tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {...} <\/tt> akkor a ford\u00edt\u00f3 gondoskodna arr\u00f3l, hogy csak az alt\u00edpusai <tt> Sz\u00e1m<\/tt> t\u00edpus argumentumk\u00e9nt haszn\u00e1lhat\u00f3.\u00a0 Vagyis a <tt> Doboz&lt;Sz\u00e1m&gt;<\/tt> vagy a <tt> Doboz&lt;Long&gt;<\/tt> megengedett, de a <tt> Box&lt;Object&gt;<\/tt> vagy <tt> Box&lt;String&gt;<\/tt> elutas\u00edt\u00e1sra ker\u00fclne<\/li>\n<\/ol>\n<\/ol>\n<p>P\u00e9lda (korl\u00e1tozott p\u00e9ld\u00e1nyos\u00edt\u00e1sra egy t\u00edpusparam\u00e9ter fels\u0151 korl\u00e1tja miatt):<br \/>\n<tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t T \u00e9rt\u00e9k;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public Box(T t) { \u00e9rt\u00e9k = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><tt> oszt\u00e1ly teszt {\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 = \u00faj Box&lt;Long&gt;(0L);\u00a0\u00a0 <b> \/\/ rendben<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Box&lt;String&gt; boxOfString = new Box&lt;String&gt;(\"\"); <b> <span style=\"color:#330000;\"> \/\/ hiba: A karakterl\u00e1nc nincs a hat\u00e1rokon bel\u00fcl<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>\n<li><b> <i> Hozz\u00e1f\u00e9r\u00e9s a nem statikus tagokhoz. <\/i> <\/b> A fels\u0151 korl\u00e1t hozz\u00e1f\u00e9r\u00e9st biztos\u00edt az \u00f6sszes nyilv\u00e1nos, nem statikus met\u00f3dushoz \u00e9s a fels\u0151 korl\u00e1t mez\u0151j\u00e9hez.\u00a0 A mi <tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {...}<\/tt> az oszt\u00e1lyban meghat\u00e1rozott \u00f6sszes nyilv\u00e1nos nem statikus met\u00f3dust meg tudjuk h\u00edvni <tt> Sz\u00e1m<\/tt> , mint pl <tt> intValue()<\/tt> p\u00e9ld\u00e1ul.\u00a0 A fels\u0151 korl\u00e1t n\u00e9lk\u00fcl a ford\u00edt\u00f3 minden ilyen h\u00edv\u00e1st elutas\u00edtana. P\u00e9lda (nem statikus tagokhoz val\u00f3 hozz\u00e1f\u00e9r\u00e9sre egy t\u00edpusparam\u00e9ter fels\u0151 korl\u00e1tja miatt):<\/li>\n<\/ol>\n<p><tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t T \u00e9rt\u00e9k;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public Box(T t) { \u00e9rt\u00e9k = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public int increment() { return value.intValue()+1; } <b> \/\/ &lt;= hiba lenne a sz\u00e1mhoz k\u00f6t\u00f6tt n\u00e9lk\u00fcl<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>\n<li><b> <i> \u00cdrja be: T\u00f6rl\u00e9s. <\/i> <\/b> A bal sz\u00e9ls\u0151 fels\u0151 korl\u00e1t a t\u00edpust\u00f6rl\u00e9sre szolg\u00e1l, \u00e9s helyettes\u00edti a t\u00edpusparam\u00e9tert a b\u00e1jtk\u00f3dban.\u00a0 A mi\u00e9nkben <tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {...}<\/tt> minden el\u0151fordul\u00e1sa <tt> T<\/tt> a fels\u0151 korl\u00e1t v\u00e1ltan\u00e1 fel <tt> Sz\u00e1m<\/tt> .\u00a0 P\u00e9ld\u00e1ul, ha oszt\u00e1ly <tt> Doboz<\/tt> priv\u00e1t t\u00edpus\u00fa mez\u0151vel rendelkezik <tt> T<\/tt> \u00e9s egy m\u00f3dszer <tt> \u00fcres halmaz (T tartalom) <\/tt> ennek a priv\u00e1t mez\u0151nek a be\u00e1ll\u00edt\u00e1s\u00e1hoz, akkor a mez\u0151 t\u00edpus\u00fa lenne <tt> Sz\u00e1m<\/tt> t\u00edpust\u00f6rl\u00e9s ut\u00e1n, \u00e9s a met\u00f3dus met\u00f3dusra ford\u00edt\u00f3dik <tt> \u00e9rv\u00e9nytelen halmaz (sz\u00e1mtartalom)<\/tt> .<\/li>\n<\/ol>\n<\/ol>\n<p>P\u00e9lda (egy t\u00edpusparam\u00e9ter fels\u0151 hat\u00e1r\u00e1nak haszn\u00e1lat\u00e1ra a t\u00edpust\u00f6rl\u00e9sn\u00e9l &#8211; <i> el\u0151tt<\/i> t\u00edpus\u00fa t\u00f6rl\u00e9s):<br \/>\n<tt> oszt\u00e1ly\u00fa Box&lt;<b> T kiterjeszti a sz\u00e1mot<\/b> &gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 mag\u00e1n <b> T<\/b> \u00e9rt\u00e9k;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos doboz(<b> T<\/b> t) { \u00e9rt\u00e9k = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>P\u00e9lda (egy t\u00edpusparam\u00e9ter fels\u0151 hat\u00e1r\u00e1nak haszn\u00e1lat\u00e1ra a t\u00edpust\u00f6rl\u00e9sn\u00e9l &#8211;<\/ol>\n<\/ol>\n<p><i> ut\u00e1n<\/i><\/p>\n<ol>\n<ol>t\u00edpus\u00fa t\u00f6rl\u00e9s):<\/ol>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><tt> class Box {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 mag\u00e1n <b> Sz\u00e1m<\/b> \u00e9rt\u00e9k;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos doboz(<b> Sz\u00e1m<\/b> t) { \u00e9rt\u00e9k = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>Ezenk\u00edv\u00fcl a bal sz\u00e9ls\u0151 fels\u0151 korl\u00e1t tov\u00e1bbi helyeken is megjelenik, p\u00e9ld\u00e1ul automatikusan beillesztett \u00f6ntv\u00e9nyekn\u00e9l \u00e9s \u00e1thidal\u00f3 m\u00f3dszerekn\u00e9l.<\/ol>\n<p>Ha enged\u00e9lyezn\u00e9k a t\u00edpusparam\u00e9terek als\u00f3 hat\u00e1rait, milyen mell\u00e9khat\u00e1sokkal j\u00e1rn\u00e1nak vagy kellenek? Ha egy olyan konstrukci\u00f3, mint pl <tt> oszt\u00e1ly\u00fa Box&lt;T <b> nagy<\/b> Number&gt; {...} <\/tt> enged\u00e9lyezett, mit jelentene?\u00a0 Mit jelentene egy fels\u0151 t\u00edpusparam\u00e9ter-korl\u00e1t 3 mell\u00e9khat\u00e1sa &#8211; korl\u00e1tozott p\u00e9ld\u00e1nyos\u00edt\u00e1s, hozz\u00e1f\u00e9r\u00e9s a nem statikus taghoz, t\u00edpust\u00f6rl\u00e9s &#8211; als\u00f3 korl\u00e1t eset\u00e9n?<\/p>\n<p><i> Korl\u00e1tozott p\u00e9ld\u00e1nyos\u00edt\u00e1sok. <\/i> A ford\u00edt\u00f3 egy als\u00f3 korl\u00e1tos t\u00edpusparam\u00e9terrel korl\u00e1tozhatja az \u00e1ltal\u00e1nos t\u00edpus p\u00e9ld\u00e1nyos\u00edt\u00e1s\u00e1ra haszn\u00e1lhat\u00f3 t\u00edpusokat.\u00a0 P\u00e9ld\u00e1ul a ford\u00edt\u00f3 enged\u00e9lyezhet olyan p\u00e9ld\u00e1nyokat, mint pl <tt> Doboz&lt;Sz\u00e1m&gt;<\/tt> \u00e9s <tt> Box&lt;Object&gt;<\/tt> a <tt> Doboz&lt;T <b> nagy<\/b> Sz\u00e1m&gt; <\/tt> \u00e9s elutas\u00edtja az olyan p\u00e9ld\u00e1nyokat, mint pl <tt> Doboz&lt;Long&gt;<\/tt> vagy <tt> Doboz&lt;Short&gt;<\/tt> .\u00a0 Ez egy olyan hat\u00e1s lenne, amely \u00f6sszhangban van a fels\u0151 t\u00edpus\u00fa param\u00e9terhat\u00e1rokn\u00e1l le\u00edrt korl\u00e1toz\u00f3 mell\u00e9khat\u00e1ssal.<\/p>\n<p><i> Hozz\u00e1f\u00e9r\u00e9s a nem statikus tagokhoz. <\/i> Az alacsonyabb t\u00edpus\u00fa param\u00e9ter-korl\u00e1t nem ad hozz\u00e1f\u00e9r\u00e9st semmilyen konkr\u00e9t met\u00f3dushoz az oszt\u00e1lyb\u00f3l \u00f6r\u00f6k\u00f6lteken k\u00edv\u00fcl <tt> Objektum<\/tt> . p\u00e9ld\u00e1j\u00e1ban <tt> Doboz&lt;T <b> nagy<\/b> Sz\u00e1m&gt; <\/tt> a szupert\u00edpusai <tt> Sz\u00e1m<\/tt> nincs semmi k\u00f6z\u00f6s benn\u00fck, kiv\u00e9ve, hogy referenciat\u00edpusok, \u00e9s ez\u00e9rt alt\u00edpusai <tt> Objektum<\/tt> .\u00a0 A ford\u00edt\u00f3 nem felt\u00e9telezheti, hogy a t\u00edpus\u00fa mez\u0151 <tt> T<\/tt> t\u00edpus\u00fa <tt> Sz\u00e1m<\/tt> vagy annak egy alt\u00edpusa.\u00a0 Ehelyett a t\u00edpus mez\u0151 <tt> T<\/tt> b\u00e1rmilyen szupert\u00edpus\u00fa lehet <tt> Sz\u00e1m<\/tt> , mint pl <tt> Sorozatozhat\u00f3<\/tt> vagy <tt> Objektum<\/tt> .\u00a0 Egy olyan m\u00f3dszer megh\u00edv\u00e1sa, mint pl <tt> intValue()<\/tt> m\u00e1r nem t\u00edpusbiztos, \u00e9s a ford\u00edt\u00f3nak el kell utas\u00edtania. K\u00f6vetkez\u00e9sk\u00e9ppen az als\u00f3 t\u00edpusparam\u00e9ter-korl\u00e1t nem ad hozz\u00e1f\u00e9r\u00e9st az oszt\u00e1lyban meghat\u00e1rozottakon k\u00edv\u00fcli nem statikus tagokhoz <tt> Objektum<\/tt> \u00e9s \u00edgy ugyanaz a hat\u00e1sa, mint a \u201enincs k\u00f6t\u00f6tt\u201d.<\/p>\n<p><i> \u00cdrja be: T\u00f6rl\u00e9s<\/i> .\u00a0 Ezt a logikai vonalat k\u00f6vetve nincs \u00e9rtelme a t\u00edpusparam\u00e9ter el\u0151fordul\u00e1sait a bal sz\u00e9ls\u0151 als\u00f3 korl\u00e1tra cser\u00e9lni.\u00a0 Olyan met\u00f3dus deklar\u00e1l\u00e1sa, mint a konstruktor <tt> Doboz(<b> T<\/b> t) <\/tt> mint kivitelez\u0151 <tt> Doboz(<b> Sz\u00e1m<\/b> t)<\/tt> ennek figyelembev\u00e9tel\u00e9vel nincs \u00e9rtelme <tt> T<\/tt> szupert\u00edpusa v\u00e1ltja fel <tt> Sz\u00e1m<\/tt> .\u00a0 An <tt> Objektum<\/tt> jogosan \u00e1tadhat\u00f3 a konstruktornak egy p\u00e9ld\u00e1nyban <tt> Box&lt;Object&gt;<\/tt> \u00e9s a kivitelez\u0151 visszautas\u00edtan\u00e1.\u00a0 Ez hal\u00e1losan rossz lenne.\u00a0\u00a0 Teh\u00e1t a t\u00edpust\u00f6rl\u00e9s a t\u00edpusv\u00e1ltoz\u00f3 \u00f6sszes el\u0151fordul\u00e1s\u00e1t lecser\u00e9ln\u00e9<tt> T<\/tt> t\u00edpus szerint <tt> Objektum<\/tt> , \u00e9s nem az als\u00f3 hat\u00e1ra szerint.\u00a0 Az als\u00f3 hat\u00e1r ism\u00e9telten ugyanazt a hat\u00e1st fejti ki, mint a &#8220;nincs korl\u00e1t&#8221;.<\/p>\n<p>Szeretn\u00e9 kital\u00e1lni, mit jelentene, ha mindkett\u0151 alacsonyabb lenne? <i> _\u00e9s_<\/i> megengedettek a fels\u0151 hat\u00e1rok?\u00a0\u00a0 \u00c9n szem\u00e9ly szerint nem is akarok erre gondolni, \u00e9s ha megengedi, sz\u00edvesebben iktatn\u00e1m a &#8220;nem kezelhet\u0151&#8221; kateg\u00f3ri\u00e1ba.<\/p>\n<p>A l\u00e9nyeg: minden, ami egy &#8220;<tt> nagy<\/tt> A &#8220;k\u00f6tve v\u00e1s\u00e1rolna meg&#8221; az a korl\u00e1toz\u00e1s, amelyre csak a szupert\u00edpusok vonatkoznak <tt> Sz\u00e1m<\/tt> t\u00edpus argumentumk\u00e9nt haszn\u00e1lhat\u00f3k.\u00a0 \u00c9s m\u00e9g ezt is gyakran f\u00e9lre\u00e9rtik.\u00a0 Ez NEM azt jelenten\u00e9 <tt> oszt\u00e1ly Box&lt;T szupersz\u00e1m&gt; {...}<\/tt> csak szupert\u00edpusainak p\u00e9ld\u00e1nyait tartalmazza <tt> Sz\u00e1m<\/tt> .\u00a0 \u00c9ppen ford\u00edtva \u2013 ahogy az al\u00e1bbi p\u00e9lda is mutatja!<\/p>\n<p>P\u00e9lda (egy t\u00edpusparam\u00e9ter fels\u0151 hat\u00e1r\u00e1nak haszn\u00e1lat\u00e1ra a t\u00edpust\u00f6rl\u00e9sn\u00e9l &#8211; <i> el\u0151tt<\/i> t\u00edpus\u00fa t\u00f6rl\u00e9s):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> oszt\u00e1ly\u00fa Box&lt;<b> T szupersz\u00e1m<\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 mag\u00e1n <b> T<\/b> \u00e9rt\u00e9k;<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos doboz(<b> T<\/b> t) { \u00e9rt\u00e9k = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>P\u00e9lda (egy t\u00edpusparam\u00e9ter fels\u0151 hat\u00e1r\u00e1nak haszn\u00e1lat\u00e1ra a t\u00edpust\u00f6rl\u00e9sn\u00e9l &#8211; <i> ut\u00e1n<\/i> t\u00edpus\u00fa t\u00f6rl\u00e9s):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> class Box {<\/tt><br \/>\n<tt> \u00a0\u00a0 mag\u00e1n <b> Objektum<\/b> \u00e9rt\u00e9k;<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos doboz(<b> Objektum<\/b> t) { \u00e9rt\u00e9k = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>A <tt> oszt\u00e1ly\u00fa Box&lt;T <b> nagy<\/b> Number&gt; {...} <\/tt> t\u00edpust\u00f6rl\u00e9ssel ford\u00edtan\u00e1k le a <tt> Doboz<\/tt> tartalmaz egy <tt> Objektum<\/tt> mez\u0151re \u00e9s a konstruktorra ford\u00edtva lenne <tt> Doboz (t t\u00e1rgy)<\/tt> . Ez alapvet\u0151en k\u00fcl\u00f6nb\u00f6zik a <tt> oszt\u00e1ly\u00fa Box&lt;T <b> kiterjed<\/b> Number&gt; {...}<\/tt> , amelyet a <tt> Doboz<\/tt> amely a <tt> Sz\u00e1m<\/tt> mez\u0151re \u00e9s a konstruktorra ford\u00edtva lenne <tt> Doboz (t sz\u00e1m)<\/tt> . K\u00f6vetkez\u00e9sk\u00e9ppen a <tt> Doboz&lt;Sz\u00e1m&gt;<\/tt> p\u00e9ld\u00e1nyos\u00edtott a<tt> oszt\u00e1ly Box&lt;T kiterjeszti Number&gt; {...}<\/tt> m\u00e1s lenne, mint a <tt> Doboz&lt;Sz\u00e1m&gt;<\/tt> p\u00e9ld\u00e1nyos\u00edt\u00e1s a <tt> oszt\u00e1ly Box&lt;T szupersz\u00e1m&gt; {...}<\/tt> , ami val\u00f3sz\u00edn\u0171leg zavart okozhat.\u00a0 Emiatt az oszt\u00e1lyok t\u00edpusparam\u00e9terein\u00e9l nincs \u00e9rtelme az als\u00f3 hat\u00e1roknak.<\/p>\n<p>&nbsp;<\/p>\n<hr width=\"100%\" \/>\n<p>&nbsp;<\/p>\n<p><b>Als\u00f3 korl\u00e1t t\u00edpus\u00fa m\u00f3dszerek param\u00e9terei<\/b><\/p>\n<p>A met\u00f3dusokkal \u00e9s azok argumentumt\u00edpusaival egy\u00fctt alkalmank\u00e9nt hasznos lehet egy als\u00f3 korl\u00e1ttal rendelkez\u0151 t\u00edpusparam\u00e9ter.<\/p>\n<p>P\u00e9lda (olyan m\u00f3dszerre, amelyn\u00e9l el\u0151ny\u00f6s lenne egy als\u00f3 korl\u00e1ttal rendelkez\u0151 t\u00edpusparam\u00e9ter):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t X el\u0151sz\u00f6r;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t Y m\u00e1sodperc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos &lt;<b> Egy szuper X<\/b> ,<b> B szuper Y<\/b> &gt; B addToMap(Map&lt;A,B&gt; t\u00e9rk\u00e9p) { \/\/ hiba: a t\u00edpusparam\u00e9ternek nem lehet als\u00f3 hat\u00e1ra<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return map.put(first, second);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> oszt\u00e1ly teszt {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Pair&lt;String,Long&gt; p\u00e1r = new Pair&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; t\u00e9rk\u00e9p = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Sz\u00e1m sz\u00e1m = pair.addToMap(map);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>A <tt> addToMap()<\/tt> met\u00f3dus hozz\u00e1adja a p\u00e1r tartalm\u00e1t egy t\u00e9rk\u00e9phez.\u00a0 B\u00e1rmilyen t\u00e9rk\u00e9p, amely szupert\u00edpusokat tartalmazhat <tt> X<\/tt> \u00e9s <tt> Y<\/tt> megtenn\u00e9.\u00a0 A t\u00e9rk\u00e9p\u00e9 <tt> tesz()<\/tt> A met\u00f3dus az adott kulcshoz tartoz\u00f3 t\u00e9rk\u00e9pen tal\u00e1lhat\u00f3 \u00e9rt\u00e9ket adja vissza, ha m\u00e1r van kulcs\u00e9rt\u00e9k bejegyz\u00e9s a kulcshoz a t\u00e9rk\u00e9pen.\u00a0 A t\u00e9rk\u00e9p visszat\u00e9r\u00e9si \u00e9rt\u00e9ke <tt> tesz()<\/tt> m\u00f3dszert kell visszak\u00fcldeni a <tt> addToMap()<\/tt> m\u00f3dszer.\u00a0 Ilyen k\u00f6r\u00fclm\u00e9nyek k\u00f6z\u00f6tt szeretn\u00e9nk deklar\u00e1lni a fenti m\u00f3dszert: A t\u00e9rk\u00e9p param\u00e9terezve a p\u00e1r t\u00edpusparam\u00e9tereinek szupert\u00edpusaival \u00e9s a <tt> addToMap()<\/tt> A met\u00f3dus visszat\u00e9r\u00e9si t\u00edpusa a t\u00e9rk\u00e9p \u00e9rt\u00e9kt\u00edpusa.<\/p>\n<p>Mivel a ford\u00edt\u00f3 nem enged als\u00f3 hat\u00e1rokat a t\u00edpusparam\u00e9terekre, sz\u00fcks\u00e9g\u00fcnk van egy ker\u00fcl\u0151 megold\u00e1sra.<\/p>\n<p>Az egyik lehets\u00e9ges megold\u00e1s a helyettes\u00edt\u0151 karakter haszn\u00e1lata, mivel a helyettes\u00edt\u0151 karaktereknek lehet als\u00f3 korl\u00e1tja.\u00a0 \u00cdme egy megold\u00e1s a helyettes\u00edt\u0151 karakter haszn\u00e1lat\u00e1val.<\/p>\n<p>P\u00e9lda (az el\u0151z\u0151 p\u00e9lda megker\u00fcl\u00e9s\u00e9re helyettes\u00edt\u0151 karakterekkel):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t X el\u0151sz\u00f6r;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t Y m\u00e1sodperc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos <b> Objektum<\/b> addToMap(Map&lt;<b> ? Szuper X<\/b> , <b> ? szuper Y<\/b> &gt; t\u00e9rk\u00e9p) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return map.put(first, second);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> oszt\u00e1ly teszt {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Pair&lt;String,Long&gt; p\u00e1r = new Pair&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; t\u00e9rk\u00e9p = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Sz\u00e1m sz\u00e1m = <b> (Sz\u00e1m)<\/b> pair.addToMap(map);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>M\u0171k\u00f6dik, kiv\u00e9ve, hogy nincs m\u00f3d a k\u00edv\u00e1nt visszat\u00e9r\u00e9si t\u00edpus deklar\u00e1l\u00e1s\u00e1ra.\u00a0 Ez lenne a szupert\u00edpusa <tt> Y<\/tt> amit a ford\u00edt\u00f3 a t\u00e9rk\u00e9pt\u00edpusb\u00f3l r\u00f6gz\u00edt, de ennek megad\u00e1s\u00e1ra nincs szintaxis.\u00a0 Nem deklar\u00e1lhatjuk a visszat\u00e9r\u00e9si t\u00edpust a &#8220;<tt> ? szuper Y<\/tt> &#8220;, mert&#8221;<tt> ? szuper Y<\/tt> A &#8221; helyettes\u00edt\u0151 karakter, nem t\u00edpus, ez\u00e9rt nem enged\u00e9lyezett visszat\u00e9r\u00e9si t\u00edpusk\u00e9nt. Nincs m\u00e1s v\u00e1laszt\u00e1sunk, \u00e9s haszn\u00e1lnunk kell <tt> Objektum<\/tt> ehelyett met\u00f3dusunk visszat\u00e9r\u00e9si t\u00edpusak\u00e9nt.\u00a0 Ez a meglehet\u0151sen nem specifikus visszat\u00e9r\u00e9si t\u00edpus viszont arra k\u00e9nyszer\u00edti a h\u00edv\u00f3kat <tt> addToMap()<\/tt> met\u00f3dust a visszat\u00e9r\u00e9si \u00e9rt\u00e9k lefel\u00e9 t\u00f6rt\u00e9n\u0151 lead\u00e1s\u00e1hoz <tt> Objektum<\/tt> t\u00e9nyleges t\u00edpus\u00e1hoz.\u00a0 Nem pontosan erre gondoltunk.<\/p>\n<p>Egy m\u00e1sik megold\u00e1s a statikus m\u00f3dszerek haszn\u00e1lata.\u00a0 Itt van egy elker\u00fcl\u0151 megold\u00e1s a statikus m\u00f3dszerrel nem statikus m\u00f3dszer helyett.<\/p>\n<p>P\u00e9lda (az el\u0151z\u0151 p\u00e9lda megker\u00fcl\u0151 megold\u00e1sa statikus m\u00f3dszerrel):<\/p>\n<blockquote><p><tt> oszt\u00e1ly Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t X el\u0151sz\u00f6r;<\/tt><br \/>\n<tt> \u00a0\u00a0 priv\u00e1t Y m\u00e1sodperc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 nyilv\u00e1nos <b> statikus<\/b> &lt;<b> A<\/b> ,<b> B<\/b> ,X <b> kiterjeszti A<\/b> ,Y <b> kiterjeszti B<\/b> &gt; B addToMap (Pair&lt;X,Y&gt; p\u00e1r, Map&lt;<b> A<\/b> ,<b> B<\/b> &gt; t\u00e9rk\u00e9p) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return map.put(pair.first,pair.second);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> oszt\u00e1ly teszt {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Pair&lt;String,Long&gt; p\u00e1r = new Pair&lt;&gt;(\"ABC\",42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Map&lt;CharSequence, Number&gt; t\u00e9rk\u00e9p = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Sz\u00e1m sz\u00e1m = <b> P\u00e1r<\/b> .addToMap(<b> p\u00e1r<\/b> ,t\u00e9rk\u00e9p);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Az \u00e1ltal\u00e1nos <tt> addToMap()<\/tt> met\u00f3dusnak n\u00e9gy t\u00edpusparam\u00e9tere van: k\u00e9t hely\u0151rz\u0151 <tt> X<\/tt> \u00e9s <tt> Y<\/tt> a p\u00e1r t\u00edpus\u00e1hoz \u00e9s k\u00e9t hely\u0151rz\u0151h\u00f6z <tt> A<\/tt> \u00e9s <tt> B <\/tt> a t\u00e9rk\u00e9p t\u00edpus\u00e1hoz. <tt> A<\/tt> \u00e9s <tt> B<\/tt> szupert\u00edpusai <tt> X<\/tt> \u00e9s <tt> Y<\/tt> , mert <tt> X<\/tt> \u00e9s <tt> Y<\/tt> \u00a0 -vel vannak kijelentve <tt> A<\/tt> \u00e9s <tt> B<\/tt> mint fels\u0151 hat\u00e1rukat. (Ne feledje, hogy az \u00e1ltal\u00e1nos met\u00f3dus t\u00edpusparam\u00e9terei <tt> X<\/tt> \u00e9s <tt> Y<\/tt> semmi k\u00f6ze a <tt> P\u00e1r<\/tt> oszt\u00e1ly\u00e9 <tt> X<\/tt> \u00e9s <tt> Y<\/tt> param\u00e9tereket.\u00a0 A nevek <tt> X<\/tt> \u00e9s <tt> Y<\/tt> \u00fajra felhaszn\u00e1lhat\u00f3k az \u00e1ltal\u00e1nos m\u00f3dszerhez, hogy k\u00f6nnyen felismerhet\u0151k legyenek a p\u00e1r t\u00edpusparam\u00e9tereik\u00e9nt. N\u00e9gy t\u00edpusparam\u00e9ter seg\u00edts\u00e9g\u00e9vel tetsz\u00e9s szerint deklar\u00e1lhatjuk a pontos visszat\u00e9r\u00e9si t\u00edpust: ez megegyezik a t\u00e9rk\u00e9p \u00e9rt\u00e9kt\u00edpus\u00e1val.<\/p>\n<p>P\u00e9lda (a t\u00edpusparam\u00e9ter illeg\u00e1lis haszn\u00e1lat\u00e1ra egy \u00e1ltal\u00e1nos oszt\u00e1ly statikus kontextus\u00e1ban):<\/p>\n<blockquote><p><tt> oszt\u00e1ly SomeClass<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> statikus inicializ\u00e1tor, statikus mez\u0151, statikus m\u00f3dszer<\/i><br \/>\n<tt> \u00a0 <b> statikus<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; teszt = \u00faj SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;(); <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 mag\u00e1n <b> statikus<\/b> <b> <span style=\"color:#000099;\"> T<\/span> <\/b> globalInfo;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos\u00a0 <b> statikus<\/b> <b> <span style=\"color:#000099;\"> T <\/span> <\/b> getGlobalInfo() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 return globalInfo;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> nem statikus inicializ\u00e1tor, nem statikus mez\u0151, nem statikus m\u00f3dszer<\/i><br \/>\n<tt> \u00a0 {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; teszt = \u00faj SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 mag\u00e1n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> localInfo;<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos\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 return localInfo;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> statikus be\u00e1gyazott t\u00edpusok<\/i><br \/>\n<tt> \u00a0 nyilv\u00e1nos <b> statikus<\/b> <b> oszt\u00e1ly<\/b> A hiba kiterjeszti a kiv\u00e9telt {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> info;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos hiba (<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { info = t; }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { return info; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 mag\u00e1n <b> fel\u00fclet<\/b> M\u00e1solhat\u00f3 {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> m\u00e1solat();\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;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 mag\u00e1n <b> enum<\/b> \u00e1llam {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u00c9RV\u00c9NYES, \u00c9RV\u00c9NYTELEN;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 mag\u00e1n <b> <span style=\"color:#000099;\"> T<\/span> <\/b> info; \/\/ hiba<\/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;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { return info; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> nem statikus be\u00e1gyazott t\u00edpusok<\/i><br \/>\n<tt> \u00a0 nyilv\u00e1nos <b> oszt\u00e1ly<\/b> Accessor {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos <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>A p\u00e9lda azt szeml\u00e9lteti, hogy a type param\u00e9ter nem haszn\u00e1lhat\u00f3 egy \u00e1ltal\u00e1nos oszt\u00e1ly statikus k\u00f6rnyezet\u00e9ben.\u00a0 Azt is mutatja, hogy a be\u00e1gyazott interf\u00e9szek \u00e9s enum t\u00edpusok az oszt\u00e1ly statikus t\u00edpus\u00fa tagjainak min\u0151s\u00fclnek.\u00a0 Csak a bels\u0151 oszt\u00e1lyok, vagyis a nem statikus be\u00e1gyazott oszt\u00e1lyok haszn\u00e1lhatj\u00e1k a befoglal\u00f3 \u00e1ltal\u00e1nos oszt\u00e1ly t\u00edpusparam\u00e9ter\u00e9t.<\/p>\n<p>Az interf\u00e9sz t\u00edpusparam\u00e9ter\u00e9nek hat\u00f3k\u00f6re az interf\u00e9sz teljes defin\u00edci\u00f3ja, kiv\u00e9ve a mez\u0151ket \u00e9s a be\u00e1gyazott t\u00edpusokat.\u00a0 Ennek az az oka, hogy az interf\u00e9szen meghat\u00e1rozott mez\u0151k \u00e9s be\u00e1gyazott t\u00edpusok implicit statikusak.<\/p>\n<p>P\u00e9lda (a t\u00edpusparam\u00e9ter illeg\u00e1lis haszn\u00e1lat\u00e1ra egy \u00e1ltal\u00e1nos interf\u00e9szen):<\/p>\n<blockquote><p><tt> interf\u00e9sz SomeInterface<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> mez\u0151<\/i><br \/>\n<tt> \u00a0 SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt; \u00e9rt\u00e9k = \u00faj SomeClass&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();\u00a0 <b> <span style=\"color:#660000;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> be\u00e1gyazott t\u00edpus<\/i><br \/>\n<tt> \u00a0 <b> oszt\u00e1ly<\/b> Accessor {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 nyilv\u00e1nos <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;\"> \/\/ hiba<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return value.getGlobalInfo();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> m\u00f3d<\/i><br \/>\n<tt> \u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getValue();<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>A p\u00e9lda azt mutatja, hogy egy interf\u00e9sz mez\u0151i implicit statikusak, \u00edgy a t\u00edpusparam\u00e9ter nem haszn\u00e1lhat\u00f3 sehol egy \u00e1ltal\u00e1nos interf\u00e9sz mez\u0151j\u00e9nek deklar\u00e1ci\u00f3j\u00e1ban.\u00a0 Hasonl\u00f3k\u00e9ppen, a be\u00e1gyazott oszt\u00e1ly statikus be\u00e1gyazott oszt\u00e1lynak min\u0151s\u00fcl, nem bels\u0151 oszt\u00e1lynak, \u00e9s emiatt a type param\u00e9ter haszn\u00e1lata a be\u00e1gyazott oszt\u00e1lyban b\u00e1rhol illeg\u00e1lis.<\/p>\n<p><b> <i> Megker\u00fcl\u0151 megold\u00e1s a be\u00e1gyazott statikus oszt\u00e1lyokhoz \u00e9s interf\u00e9szekhez:<\/i> <\/b><\/p>\n<p>Statikus be\u00e1gyazott oszt\u00e1lyok \u00e9s interf\u00e9szek eset\u00e9n ez nem jelent komoly csap\u00e1st.\u00a0 Ker\u00fcl\u0151 megold\u00e1sk\u00e9nt l\u00e9trehozhatjuk mag\u00e1t a statikus oszt\u00e1lyt vagy interf\u00e9szt.<\/p>\n<p>P\u00e9lda (megker\u00fcl\u0151 megold\u00e1s \u2013 hozza l\u00e9tre a be\u00e1gyazott statikus t\u00edpust):<\/p>\n<blockquote><p><tt> oszt\u00e1ly\u00fa Burkolat<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> theObject;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 nyilv\u00e1nos wrapper(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { return theObject; }<\/tt><tt> \u00a0 nyilv\u00e1nos Megv\u00e1ltozhatatlan<b> &lt;T&gt;<\/b> makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 vissza az \u00faj Immutable<b> &lt;T&gt;<\/b> (az Objektum);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos Mutable<b> &lt;T&gt;<\/b> makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00faj Mutable visszak\u00fcld\u00e9se<b> &lt;T&gt;<\/b> (az Objektum);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t statikus &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 nyilv\u00e1nos statikus v\u00e9gs\u0151 oszt\u00e1ly Megv\u00e1ltoztathatatlan<b> &lt;A&gt;<\/b> { <b> \/\/ most egy \u00e1ltal\u00e1nos oszt\u00e1ly<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> A<\/b> theObject;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 public Immutable(<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 nyilv\u00e1nos <b> A<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos statikus oszt\u00e1ly V\u00e1ltoz\u00f3<b> &lt;A&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... hasonl\u00f3 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Nincs ilyen megold\u00e1s a be\u00e1gyazott enum t\u00edpusokhoz, mert nem lehetnek \u00e1ltal\u00e1nosak.<\/p>\n<p><b> <i> Megold\u00e1s be\u00e1gyazott statikus oszt\u00e1lyokhoz:<\/i> <\/b><\/p>\n<p>Ha a be\u00e1gyazott statikus t\u00edpus egy oszt\u00e1ly, akkor egy alternat\u00edv megold\u00e1s az lenne, ha a statikus oszt\u00e1lyt nem statikus bels\u0151 oszt\u00e1lly\u00e1 alak\u00edtan\u00e1k.<\/p>\n<p>P\u00e9lda (megker\u00fcl\u0151 megold\u00e1s \u2013 haszn\u00e1ljon bels\u0151 oszt\u00e1lyt):<\/p>\n<blockquote><p><tt> oszt\u00e1ly\u00fa Burkolat<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> theObject;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 nyilv\u00e1nos wrapper(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos <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 visszat\u00e9r\u00e9s <b> ez.<\/b> new Mutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 public Immutable makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 visszat\u00e9r\u00e9s <b> ez.<\/b> new Immutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 priv\u00e1t statikus &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 publikus v\u00e9gs\u0151 oszt\u00e1ly Megv\u00e1ltoztathatatlan {\u00a0 <b> \/\/ m\u00e1r nem statikus oszt\u00e1ly<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> T<\/b> theObject;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 public Immutable(<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 nyilv\u00e1nos <b> T<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos oszt\u00e1ly V\u00e1ltoz\u00f3\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... hasonl\u00f3 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Ez a megold\u00e1s bizonyos m\u00e9rt\u00e9k\u0171 t\u00f6bbletk\u00f6lts\u00e9ggel j\u00e1r, mivel minden bels\u0151 oszt\u00e1lynak van egy rejtett hivatkoz\u00e1sa a k\u00fcls\u0151 t\u00edpus\u00fa p\u00e9ld\u00e1nyra, amelyre ebben a p\u00e9ld\u00e1ban nincs sz\u00fcks\u00e9g\u00fck, \u00e9s nincs is r\u00e1 sz\u00fcks\u00e9g\u00fck; a rejtett hivatkoz\u00e1s csak poggy\u00e1sz.\u00a0 A bels\u0151 oszt\u00e1lyokat gyakran interf\u00e9szekkel kombin\u00e1lj\u00e1k, hogy a bels\u0151 oszt\u00e1ly a befoglal\u00f3 oszt\u00e1ly priv\u00e1t megval\u00f3s\u00edt\u00e1si r\u00e9szlete maradjon.\u00a0 Itt is megtehetj\u00fck ugyanezt.<\/p>\n<p>P\u00e9lda (az el\u0151z\u0151 megold\u00e1s finom\u00edtva):<\/p>\n<blockquote><p><tt> oszt\u00e1ly\u00fa Burkolat<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 z\u00e1rtk\u00f6r\u0171 d\u00f6nt\u0151 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> theObject;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 nyilv\u00e1nos wrapper(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 nyilv\u00e1nos <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { return theObject; }<\/tt><tt> \u00a0 nyilv\u00e1nos Mutable<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 nyilv\u00e1nos Megv\u00e1ltozhatatlan<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\u00e1t statikus &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 <b> nyilv\u00e1nos fel\u00fclet <\/b> Megv\u00e1ltozhatatlan&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> nyilv\u00e1nos fel\u00fclet <\/b> Mutabilis&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> mag\u00e1n<\/b> utols\u00f3 oszt\u00e1ly ImmutableImplementation <b> Immutable&lt;T&gt; val\u00f3s\u00edtja meg<\/b> {\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 priv\u00e1t v\u00e9gleges 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 return makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 <b> mag\u00e1n<\/b> oszt\u00e1ly MutableImplementation <b> megval\u00f3s\u00edtja a Mutable&lt;T&gt;<\/b> {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... hasonl\u00f3 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Mint l\u00e1that\u00f3, a be\u00e1gyazott nyilv\u00e1nos interf\u00e9szeknek \u00e1ltal\u00e1nosnak kell lenni\u00fck, m\u00edg a bels\u0151 priv\u00e1t oszt\u00e1lyok haszn\u00e1lhatj\u00e1k a befoglal\u00f3 oszt\u00e1ly t\u00edpusparam\u00e9ter\u00e9t.<\/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>Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt l\u00e1sd: meg ezt a GYIK-ot: <a href=\"http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1\" rel=\"nofollow\">http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1<\/a> \u00cdme, h\u00f6rven a\u011f\u0131n fontosos pont \u00fczyz a GYIK-b\u0151l. P\u00e9lda (\u00e1lt\u00e1lanos t\u00edpusra): oszt\u00e1ly Pair&lt;X,Y&gt; {\u00a0 \u00a0 priv\u00e1t X first; \u00a0 priv\u00e1t Y m\u00e1sodperc; \u00a0 public par(X a1, Y a2) { \u00a0\u00a0\u00a0 first = a1; \u00a0\u00a0\u00a0 m\u00e1sodik = 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-generikumok","tag-java","tag-java-generikusok"],"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":"A m\u00e1sodik konstantin\u00e1polyi \u00f6kumenikus zsinat (381) - a Szentl\u00e9lek tan\u00e1nak meger\u0151s\u00edt\u00e9se","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;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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":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":1},"title":"Az \u00d6t\u00f6dik Konstantin\u00e1polyi \u00d6kumenikus Zsinat (553): A h\u00e1rom fej vita, Chalcedon teol\u00f3giai hagyat\u00e9ka \u00e9s I. Justinianus cs\u00e1sz\u00e1r politik\u00e1ja","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;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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":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":2},"title":"Az \u00e9n n\u00e9zetem Istenr\u0151l, a Bibli\u00e1r\u00f3l \u00e9s Krisztusr\u00f3l","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;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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":1733,"url":"https:\/\/vkrastev1blog.com\/2025\/01\/29\/%d0%b7%d0%b0-%d0%b1%d0%be%d0%b3-%d0%b8-%d0%b2%d1%81%d0%b5%d0%bb%d0%b5%d0%bd%d0%b0%d1%82%d0%b0\/","url_meta":{"origin":31,"position":3},"title":"Isten\u00e9rt \u00e9s az Univerzum\u00e9rt","author":"vkrastev2014","date":"29.01.2025","format":false,"excerpt":"\u041f\u0440\u0438\u0447\u0438\u043d\u0438 \u0434\u0430 \u0432\u044f\u0440\u0432\u0430\u043c\u0435, \u0447\u0435 \u0411\u043e\u0433 \u043d\u0430\u0438\u0441\u0442\u0438\u043d\u0430 \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. \u043e\u0442 \u041c\u0435\u0440\u0438\u043b\u0438\u043d \u0410\u0434\u0430\u043c\u0441\u044a\u043d \u0412\u0441\u0435\u043b\u0435\u043d\u0430\u0442\u0430 \u0438\u043c\u0430 \u043d\u0430\u0447\u0430\u043b\u043e - \u043a\u0430\u043a\u0432\u043e \u0433\u043e \u0435 \u043f\u0440\u0435\u0434\u0438\u0437\u0432\u0438\u043a\u0430\u043b\u043e? \u0423\u0447\u0435\u043d\u0438\u0442\u0435 \u0441\u0430 \u0443\u0431\u0435\u0434\u0435\u043d\u0438, \u0447\u0435 \u043d\u0430\u0448\u0430\u0442\u0430 \u0412\u0441\u0435\u043b\u0435\u043d\u0430 \u0435 \u0437\u0430\u043f\u043e\u0447\u043d\u0430\u043b\u0430 \u0441 \u0435\u0434\u043d\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u0430 \u0435\u043a\u0441\u043f\u043b\u043e\u0437\u0438\u044f \u043d\u0430 \u0435\u043d\u0435\u0440\u0433\u0438\u044f \u0438 \u0441\u0432\u0435\u0442\u043b\u0438\u043d\u0430, \u043a\u043e\u044f\u0442\u043e \u043d\u0430\u0440\u0438\u0447\u0430\u043c\u0435 \u0413\u043e\u043b\u0435\u043c\u0438\u044f\u0442 \u0432\u0437\u0440\u0438\u0432. \u0422\u043e\u0432\u0430 \u0435\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0441\u044a\u0431\u0438\u0442\u0438\u0435 \u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043d\u0430\u0447\u0430\u043b\u043e\u0442\u043e \u043d\u0430 \u0432\u0441\u0438\u0447\u043a\u043e, \u043a\u043e\u0435\u0442\u043e \u0441\u044a\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430: \u0412\u0441\u0435\u043b\u0435\u043d\u0430\u0442\u0430, \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e\u0442\u043e\u2026","rel":"","context":"In &quot;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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\/2025\/01\/093e0eeeb6f9dbc2d2ef6a13bec53c59-20240927143705-1.jpeg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2025\/01\/093e0eeeb6f9dbc2d2ef6a13bec53c59-20240927143705-1.jpeg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2025\/01\/093e0eeeb6f9dbc2d2ef6a13bec53c59-20240927143705-1.jpeg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2025\/01\/093e0eeeb6f9dbc2d2ef6a13bec53c59-20240927143705-1.jpeg?resize=700%2C400&ssl=1 2x"},"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":4},"title":"A Harmadik Efezusi \u00d6kumenikus Zsinat (431): Alexandriai Cirill \u00e9s Nesztoriosz krisztol\u00f3giai vita, valamint az Istensz\u00fcl\u0151r\u0151l sz\u00f3l\u00f3 tan meger\u0151s\u00edt\u00e9se","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;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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":[]},{"id":2556,"url":"https:\/\/vkrastev1blog.com\/2026\/10\/02\/%d1%88%d0%b5%d1%81%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\/","url_meta":{"origin":31,"position":5},"title":"A hatodik konstantin\u00e1polyi \u00f6kumenikus zsinat (680\u2013681): az egy\u00fcgy\u0171s\u00e9g el\u00edt\u00e9l\u00e9se, valamint a k\u00e9t akarat \u00e9s a k\u00e9t cselekedet meger\u0151s\u00edt\u00e9se J\u00e9zus Krisztusban","author":"vkrastev2014","date":"02.10.2026","format":false,"excerpt":"\u0428\u0435\u0441\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 (680\u2013681 \u0433.): \u043e\u0441\u044a\u0436\u0434\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043c\u043e\u043d\u043e\u0442\u0435\u043b\u0438\u0442\u0441\u0442\u0432\u043e\u0442\u043e \u0438 \u0443\u0442\u0432\u044a\u0440\u0436\u0434\u0430\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0434\u0432\u0435\u0442\u0435 \u0432\u043e\u043b\u0438 \u0438 \u0434\u0432\u0435\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0418\u0438\u0441\u0443\u0441 \u0425\u0440\u0438\u0441\u0442\u043e\u0441 \u041d\u0430\u0443\u0447\u043d\u043e-\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u044f \u0437\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u0435 \u0432 WordPress \u0420\u0435\u0437\u044e\u043c\u0435: \u0428\u0435\u0441\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 \u0422\u0440\u0435\u0442\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 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434\u0430 680\u2013681 \u0433. \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u0442\u043e \u043d\u0430 \u0432\u0438\u0437\u0430\u043d\u0442\u0438\u0439\u0441\u043a\u0438\u044f \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d IV\u2026","rel":"","context":"In &quot;Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l&quot;","block_context":{"text":"Cikkek a Bibli\u00e1nak, valamint a l\u00e9lekr\u0151l \u00e9s a testr\u0151l","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\/yxsv0k-cfybsgrn4iacbsni6wvorwsimqx4mcnk6i7vvno8-yygtibr2p6c7uhf18h7kykuh-oqxfnmevvk2efigpws1vzqug_m-ryim8mdynspdwkucquhts-ckr3g53iyvlogvjhinycbsjewtpqbgjh-apj7ffnumanhcavu.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/yxsv0k-cfybsgrn4iacbsni6wvorwsimqx4mcnk6i7vvno8-yygtibr2p6c7uhf18h7kykuh-oqxfnmevvk2efigpws1vzqug_m-ryim8mdynspdwkucquhts-ckr3g53iyvlogvjhinycbsjewtpqbgjh-apj7ffnumanhcavu.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/yxsv0k-cfybsgrn4iacbsni6wvorwsimqx4mcnk6i7vvno8-yygtibr2p6c7uhf18h7kykuh-oqxfnmevvk2efigpws1vzqug_m-ryim8mdynspdwkucquhts-ckr3g53iyvlogvjhinycbsjewtpqbgjh-apj7ffnumanhcavu.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/yxsv0k-cfybsgrn4iacbsni6wvorwsimqx4mcnk6i7vvno8-yygtibr2p6c7uhf18h7kykuh-oqxfnmevvk2efigpws1vzqug_m-ryim8mdynspdwkucquhts-ckr3g53iyvlogvjhinycbsjewtpqbgjh-apj7ffnumanhcavu.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/vkrastev1blog.com\/wp-content\/uploads\/2026\/10\/yxsv0k-cfybsgrn4iacbsni6wvorwsimqx4mcnk6i7vvno8-yygtibr2p6c7uhf18h7kykuh-oqxfnmevvk2efigpws1vzqug_m-ryim8mdynspdwkucquhts-ckr3g53iyvlogvjhinycbsjewtpqbgjh-apj7ffnumanhcavu.jpg?resize=1050%2C600&ssl=1 3x"},"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}]}}