{"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":"C\u00e1c kh\u00e1i ni\u1ec7m chung v\u1ec1 Java \u0111\u01b0\u1ee3c gi\u1ea3i th\u00edch d\u01b0\u1edbi d\u1ea1ng ng\u1eafn g\u1ecdn k\u00e8m theo c\u00e1c v\u00ed d\u1ee5"},"content":{"rendered":"<p>Vui l\u00f2ng xem C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p n\u00e0y \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin:<\/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>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t s\u1ed1 \u0111i\u1ec3m quan tr\u1ecdng t\u1eeb C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p n\u00e0y.<\/p>\n<p>V\u00ed d\u1ee5 (thu\u1ed9c lo\u1ea1i chung):<\/p>\n<blockquote><p><tt> l\u1edbp Pair&lt;X,Y&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0 ri\u00eang X tr\u01b0\u1edbc;<\/tt><br \/>\n<tt> \u00a0 ri\u00eang Y gi\u00e2y;<\/tt><tt> \u00a0 C\u1eb7p c\u00f4ng khai(X a1, Y a2) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0111\u1ea7u ti\u00ean = a1;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 gi\u00e2y = a2;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng khai X getFirst() { tr\u1ea3 v\u1ec1 tr\u01b0\u1edbc; }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng khai Y getSecond() { return th\u1ee9 hai; }<\/tt><br \/>\n<tt> \u00a0 public void setFirst(X arg)\u00a0 { first = arg; }<\/tt><br \/>\n<tt> \u00a0 public void setSecond(Y arg) { gi\u00e2y = arg; }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>l\u1edbp h\u1ecdc <tt> \u0110\u00f4i<\/tt> c\u00f3 hai tham s\u1ed1 lo\u1ea1i <tt> X <\/tt> V\u00e0 <tt> Y<\/tt> .\u00a0 Ch\u00fang \u0111\u01b0\u1ee3c thay th\u1ebf b\u1eb1ng c\u00e1c \u0111\u1ed1i s\u1ed1 ki\u1ec3u khi ki\u1ec3u chung <tt> \u0110\u00f4i<\/tt> \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o. V\u00ed d\u1ee5, trong khai b\u00e1o <tt> C\u1eb7p&lt;String, Date&gt;<\/tt> tham s\u1ed1 ki\u1ec3u <tt> X<\/tt> \u0111\u01b0\u1ee3c thay th\u1ebf b\u1eb1ng \u0111\u1ed1i s\u1ed1 ki\u1ec3u <tt> S\u1ee3i d\u00e2y<\/tt> V\u00e0 <tt> Y<\/tt> \u0111\u01b0\u1ee3c thay th\u1ebf b\u1edfi\u00a0 <tt> Ng\u00e0y<\/tt> .<br \/>\nPh\u1ea1m vi c\u1ee7a s\u1ed1 nh\u1eadn d\u1ea1ng <tt> X <\/tt> V\u00e0 <tt> Y<\/tt> l\u00e0<b> <i> <\/i> <\/b> to\u00e0n b\u1ed9 \u0111\u1ecbnh ngh\u0129a c\u1ee7a l\u1edbp.\u00a0 Trong ph\u1ea1m vi n\u00e0y, hai tham s\u1ed1 lo\u1ea1i <tt> X <\/tt> V\u00e0 <tt> Y<\/tt> \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng gi\u1ed1ng nh\u01b0 ch\u00fang l\u00e0 lo\u1ea1i (v\u1edbi m\u1ed9t s\u1ed1 h\u1ea1n ch\u1ebf). Trong v\u00ed d\u1ee5 tr\u00ean, c\u00e1c tham s\u1ed1 ki\u1ec3u \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m \u0111\u1ed1i s\u1ed1 v\u00e0 ki\u1ec3u tr\u1ea3 v\u1ec1 c\u1ee7a c\u00e1c ph\u01b0\u01a1ng th\u1ee9c c\u00e1 th\u1ec3 v\u00e0 c\u00e1c ki\u1ec3u tr\u01b0\u1eddng c\u00e1 th\u1ec3.<br \/>\nC\u00e1c tham s\u1ed1 ki\u1ec3u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c khai b\u00e1o v\u1edbi gi\u1edbi h\u1ea1n. C\u00e1c gi\u1edbi h\u1ea1n cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o c\u00e1c ph\u01b0\u01a1ng th\u1ee9c thu\u1ed9c lo\u1ea1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh m\u00e0 tham s\u1ed1 lo\u1ea1i \u0111\u1ea1i di\u1ec7n. Trong v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i, ch\u00fang t\u00f4i kh\u00f4ng g\u1ecdi b\u1ea5t k\u1ef3 ph\u01b0\u01a1ng th\u1ee9c n\u00e0o thu\u1ed9c lo\u1ea1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh <tt> X <\/tt> V\u00e0 <tt> Y<\/tt> . V\u00ec l\u00fd do n\u00e0y, hai tham s\u1ed1 lo\u1ea1i kh\u00f4ng b\u1ecb gi\u1edbi h\u1ea1n.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 lo\u1ea1i tham s\u1ed1 c\u1ee5 th\u1ec3):<\/p>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> C\u1eb7p&lt;String,Long&gt;<\/span> <\/b> c\u1eb7p) {<\/tt><br \/>\n<tt> \u00a0 System.out.println(\"(\"+pair.getFirst()+\",\"+pair.getSecond()+\")\");<\/tt><br \/>\n<tt> }<\/tt><tt> <b> <span style=\"color:#000099;\"> C\u1eb7p&lt;String,Long&gt;<\/span> <\/b> gi\u1edbi h\u1ea1n = m\u1edbi <b> <span style=\"color:#000099;\"> C\u1eb7p&lt;String,Long&gt;<\/span> <\/b> (\"t\u1ed1i \u0111a\", 1024L);<\/tt><br \/>\n<tt> printPair(gi\u1edbi h\u1ea1n);<\/tt><\/p><\/blockquote>\n<p>V\u00ed d\u1ee5 (v\u1ec1 lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n):<\/p>\n<blockquote>\n<blockquote><p><tt> public void printPair(<b> <span style=\"color:#000099;\"> C\u1eb7p&lt;?,?&gt;<\/span> <\/b> c\u1eb7p) {<\/tt><br \/>\n<tt> \u00a0 System.out.println(\"(\"+pair.getFirst()+\",\"+pair.getSecond()+\")\");<\/tt><br \/>\n<tt> }<\/tt><tt> <b> <span style=\"color:#000099;\"> C\u1eb7p&lt;?,?&gt;<\/span> <\/b> gi\u1edbi h\u1ea1n = m\u1edbi <b> <span style=\"color:#000099;\"> C\u1eb7p&lt;String,Long&gt;<\/span> <\/b> (\"t\u1ed1i \u0111a\", 1024L);<\/tt><br \/>\n<tt> printPair(gi\u1edbi h\u1ea1n);<\/tt><\/p><\/blockquote>\n<\/blockquote>\n<p>T\u1ea5t c\u1ea3 c\u00e1c phi\u00ean b\u1ea3n c\u1ee7a m\u1ed9t ki\u1ec3u chung \u0111\u1ec1u c\u00f3 chung c\u00e1ch bi\u1ec3u di\u1ec5n ki\u1ec3u th\u1eddi gian ch\u1ea1y, c\u1ee5 th\u1ec3 l\u00e0 c\u00e1ch bi\u1ec3u di\u1ec5n ki\u1ec3u th\u00f4. V\u00ed d\u1ee5, s\u1ef1 kh\u1edfi t\u1ea1o c\u1ee7a m\u1ed9t ki\u1ec3u generic <tt> Danh s\u00e1ch<\/tt> , ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> Danh s\u00e1ch&lt;Date&gt;<\/tt> , <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> , <tt> Danh s\u00e1ch&lt;Long&gt;<\/tt> , v.v. c\u00f3 c\u00e1c ki\u1ec3u t\u0129nh kh\u00e1c nhau t\u1ea1i th\u1eddi \u0111i\u1ec3m bi\u00ean d\u1ecbch, nh\u01b0ng c\u00f3 c\u00f9ng ki\u1ec3u \u0111\u1ed9ng <tt> Danh s\u00e1ch <\/tt> v\u00e0o th\u1eddi gian ch\u1ea1y.<\/p>\n<p>M\u1ed9t d\u00e0n di\u1ec5n vi\u00ean bao g\u1ed3m hai ph\u1ea7n:<\/p>\n<ul>\n<li>ki\u1ec3m tra ki\u1ec3u t\u0129nh \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi tr\u00ecnh bi\u00ean d\u1ecbch t\u1ea1i th\u1eddi \u0111i\u1ec3m bi\u00ean d\u1ecbch v\u00e0<\/li>\n<li>ki\u1ec3m tra ki\u1ec3u \u0111\u1ed9ng \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi m\u00e1y \u1ea3o khi ch\u1ea1y.<\/li>\n<\/ul>\n<p>Ph\u1ea7n t\u0129nh s\u1eafp x\u1ebfp c\u00e1c ph\u00f4i v\u00f4 ngh\u0129a, kh\u00f4ng th\u1ec3 th\u00e0nh c\u00f4ng, ch\u1eb3ng h\u1ea1n nh\u01b0 d\u00e0n di\u1ec5n vi\u00ean t\u1eeb <tt> S\u1ee3i d\u00e2y<\/tt> c\u00e1i \u0111\u00f3 <tt> Ng\u00e0y<\/tt> ho\u1eb7c t\u1eeb <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> c\u00e1i \u0111\u00f3 <tt> Danh s\u00e1ch&lt;Date&gt;<\/tt> .<\/p>\n<p>Ph\u1ea7n \u0111\u1ed9ng s\u1eed d\u1ee5ng th\u00f4ng tin lo\u1ea1i th\u1eddi gian ch\u1ea1y v\u00e0 th\u1ef1c hi\u1ec7n ki\u1ec3m tra lo\u1ea1i khi ch\u1ea1y.\u00a0 N\u00f3 l\u00e0m t\u0103ng m\u1ed9t <tt> ClassCastException<\/tt> n\u1ebfu lo\u1ea1i \u0111\u1ed9ng c\u1ee7a \u0111\u1ed1i t\u01b0\u1ee3ng kh\u00f4ng ph\u1ea3i l\u00e0 lo\u1ea1i m\u1ee5c ti\u00eau (ho\u1eb7c lo\u1ea1i con c\u1ee7a lo\u1ea1i m\u1ee5c ti\u00eau) c\u1ee7a d\u00e0n di\u1ec5n vi\u00ean. V\u00ed d\u1ee5 v\u1ec1 c\u00e1c v\u1eadt \u0111\u00fac c\u00f3 ph\u1ea7n \u0111\u1ed9ng l\u00e0 v\u1eadt \u0111\u00fac t\u1eeb <tt> S\u1ef1 v\u1eadt<\/tt> c\u00e1i \u0111\u00f3 <tt> S\u1ee3i d\u00e2y<\/tt> ho\u1eb7c t\u1eeb <tt> S\u1ef1 v\u1eadt<\/tt> c\u00e1i \u0111\u00f3 <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> .\u00a0 \u0110\u00e2y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 downcasts, t\u1eeb si\u00eau ki\u1ec3u xu\u1ed1ng \u0111\u1ebfn ki\u1ec3u ph\u1ee5.<\/p>\n<p>V\u00ed d\u1ee5 v\u1ec1 c\u00e1c lo\u1ea1i tham s\u1ed1 c\u1ee5 th\u1ec3 l\u00e0 <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> , <tt> Map&lt;String,Date&gt;<\/tt> , nh\u01b0ng kh\u00f4ng <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> ho\u1eb7c <tt> Map&lt;String,?&gt;<\/tt> .<\/p>\n<p>\u0110\u00f4i khi ng\u01b0\u1eddi ta mong \u0111\u1ee3i r\u1eb1ng m\u1ed9t <tt> Danh s\u00e1ch&lt;Object&gt;<\/tt> s\u1ebd l\u00e0 m\u1ed9t si\u00eau ki\u1ec3u c\u1ee7a m\u1ed9t <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> , b\u1edfi v\u00ec <tt> S\u1ef1 v\u1eadt<\/tt> l\u00e0 m\u1ed9t si\u00eau ki\u1ec3u c\u1ee7a <tt> S\u1ee3i d\u00e2y<\/tt> .\u00a0 K\u1ef3 v\u1ecdng n\u00e0y xu\u1ea5t ph\u00e1t t\u1eeb th\u1ef1c t\u1ebf l\u00e0 lo\u1ea1i m\u1ed1i quan h\u1ec7 nh\u01b0 v\u1eady t\u1ed3n t\u1ea1i \u0111\u1ed1i v\u1edbi m\u1ea3ng:\u00a0 <tt> S\u1ef1 v\u1eadt[]<\/tt> l\u00e0 m\u1ed9t si\u00eau ki\u1ec3u c\u1ee7a <tt> S\u1ee3i d\u00e2y[]<\/tt> , b\u1edfi v\u00ec <tt> S\u1ef1 v\u1eadt<\/tt> l\u00e0 m\u1ed9t si\u00eau ki\u1ec3u c\u1ee7a <tt> S\u1ee3i d\u00e2y<\/tt> . (Lo\u1ea1i quan h\u1ec7 n\u00e0y \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 <i> hi\u1ec7p ph\u01b0\u01a1ng sai<\/i> .) M\u1ed1i quan h\u1ec7 si\u00eau ki\u1ec3u con c\u1ee7a c\u00e1c ki\u1ec3u th\u00e0nh ph\u1ea7n m\u1edf r\u1ed9ng sang c\u00e1c ki\u1ec3u m\u1ea3ng t\u01b0\u01a1ng \u1ee9ng. Kh\u00f4ng c\u00f3 m\u1ed1i quan h\u1ec7 ki\u1ec3u nh\u01b0 v\u1eady t\u1ed3n t\u1ea1i \u0111\u1ed1i v\u1edbi vi\u1ec7c kh\u1edfi t\u1ea1o c\u00e1c ki\u1ec3u chung. (C\u00e1c lo\u1ea1i tham s\u1ed1 l\u00e0 <i> kh\u00f4ng<\/i> hi\u1ec7p bi\u1ebfn.)<\/p>\n<p>Vi\u1ec7c thi\u1ebfu m\u1ed1i quan h\u1ec7 si\u00eau lo\u1ea1i con gi\u1eefa c\u00e1c phi\u00ean b\u1ea3n c\u1ee7a c\u00f9ng m\u1ed9t lo\u1ea1i chung g\u00e2y ra nhi\u1ec1u h\u1eadu qu\u1ea3 kh\u00e1c nhau.\u00a0 \u0110\u00e2y l\u00e0 m\u1ed9t v\u00ed d\u1ee5.<\/p>\n<p>V\u00ed d\u1ee5:<\/p>\n<p><tt> void printAll(ArrayList&lt;Object&gt; c) {<\/tt><br \/>\n<tt> \u00a0 cho (\u0110\u1ed1i t\u01b0\u1ee3ng o : c)\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 System.out.println(o);<\/tt><br \/>\n<tt> }<\/tt><tt> Danh s\u00e1ch ArrayList&lt;String&gt; = m\u1edbi ArrayList&lt;String&gt;();<\/tt><br \/>\n<tt> ... \u0111i\u1ec1n v\u00e0o danh s\u00e1ch ...<\/tt><br \/>\n<tt> printAll(danh s\u00e1ch);\u00a0\u00a0 \/\/ l\u1ed7i<\/tt><\/p>\n<p>M\u1ed8T <tt> Danh s\u00e1ch m\u1ea3ng&lt;String&gt;<\/tt> \u0111\u1ed1i t\u01b0\u1ee3ng kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c truy\u1ec1n l\u00e0m \u0111\u1ed1i s\u1ed1 cho m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c y\u00eau c\u1ea7u <tt> ArrayList&lt;Object&gt;<\/tt> b\u1edfi v\u00ec hai lo\u1ea1i n\u00e0y l\u00e0 s\u1ef1 th\u1ec3 hi\u1ec7n c\u1ee7a c\u00f9ng m\u1ed9t lo\u1ea1i chung, nh\u01b0ng \u0111\u1ed1i v\u1edbi <i> kh\u00e1c bi\u1ec7t<\/i> lo\u1ea1i \u0111\u1ed1i s\u1ed1 v\u00e0 v\u00ec l\u00fd do n\u00e0y, ch\u00fang kh\u00f4ng t\u01b0\u01a1ng th\u00edch v\u1edbi nhau.<\/p>\n<p>C\u00e1c ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 l\u00e0 s\u1ef1 th\u1ec3 hi\u1ec7n c\u1ee5 th\u1ec3 c\u1ee7a m\u1ed9t ki\u1ec3u chung.\u00a0 Ch\u00fang g\u1ea7n gi\u1ed1ng nh\u01b0 c\u00e1c lo\u1ea1i; ch\u1ec9 c\u00f3 m\u1ed9t v\u00e0i h\u1ea1n ch\u1ebf.\u00a0 Ch\u00fang KH\u00d4NG th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho c\u00e1c m\u1ee5c \u0111\u00edch sau:<\/p>\n<ul>\n<li>\u0111\u1ec3 t\u1ea1o m\u1ea3ng<\/li>\n<li>trong x\u1eed l\u00fd ngo\u1ea1i l\u1ec7<\/li>\n<li>trong m\u1ed9t l\u1edbp theo ngh\u0129a \u0111en<\/li>\n<li>trong m\u1ed9t <tt> v\u00ed d\u1ee5<\/tt> s\u1ef1 bi\u1ec3u l\u1ed9<\/li>\n<\/ul>\n<p>M\u1ea3ng ch\u1ee9a c\u00e1c ph\u1ea7n t\u1eed c\u00f3 ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 l\u00e0 b\u1ea5t h\u1ee3p ph\u00e1p.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 lo\u1ea1i m\u1ea3ng b\u1ea5t h\u1ee3p ph\u00e1p):<\/p>\n<p><tt> ki\u1ec3m tra kho\u1ea3ng tr\u1ed1ng t\u0129nh () {<\/tt><br \/>\n<tt> \u00a0 <b> <span style=\"color:#660000;\"> Pair&lt;S\u1ed1 nguy\u00ean,S\u1ed1 nguy\u00ean&gt;[]<\/span> <\/b> intPairArr = m\u1edbi <b> <span style=\"color:#660000;\"> C\u1eb7p&lt;S\u1ed1 nguy\u00ean,S\u1ed1 nguy\u00ean&gt;[10]<\/span> <\/b> ; <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 addElements(intPairArr);\u00a0<\/tt><br \/>\n<tt> \u00a0 C\u1eb7p Pair&lt;Integer,Integer&gt; = intPairArr[1];<\/tt><br \/>\n<tt> \u00a0 S\u1ed1 nguy\u00ean i = pair.getFirst();<\/tt><br \/>\n<tt> \u00a0 pair.setSecond(i);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> t\u0129nh void addElements(<b> S\u1ef1 v\u1eadt[]<\/b> objArr) {<\/tt><br \/>\n<tt> \u00a0 objArr[0] = Pair&lt;Integer m\u1edbi,Integer&gt;(0,0);<\/tt><br \/>\n<tt> \u00a0 objArr[1] = Pair&lt;String m\u1edbi,String&gt;(\"\",\"\");\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ s\u1ebd th\u1ea5t b\u1ea1i v\u1edbi ArrayStoreException<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<p>Tr\u00ecnh bi\u00ean d\u1ecbch c\u1ea5m t\u1ea1o c\u00e1c m\u1ea3ng c\u00f3 ki\u1ec3u th\u00e0nh ph\u1ea7n l\u00e0 ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3, nh\u01b0 <tt> C\u1eb7p&lt;S\u1ed1 nguy\u00ean,S\u1ed1 nguy\u00ean&gt;<\/tt> trong v\u00ed d\u1ee5 c\u1ee7a ch\u00fang t\u00f4i.\u00a0 Ch\u00fang ta \u0111\u00e3 th\u1ea3o lu\u1eadn \u1edf m\u1ee5c tr\u01b0\u1edbc t\u1ea1i sao vi\u1ec7c tr\u00ecnh bi\u00ean d\u1ecbch \u0111\u1ee7 ti\u00eau chu\u1ea9n m\u1ed9t<span style=\"color:#000000;\"> <tt> Pair&lt;S\u1ed1 nguy\u00ean,S\u1ed1 nguy\u00ean&gt;[]<\/tt> <\/span> nh\u01b0 b\u1ea5t h\u1ee3p ph\u00e1p.\u00a0 V\u1ea5n \u0111\u1ec1 ch\u00ednh l\u00e0 tr\u00ecnh bi\u00ean d\u1ecbch v\u00e0 h\u1ec7 th\u1ed1ng th\u1eddi gian ch\u1ea1y ph\u1ea3i \u0111\u1ea3m b\u1ea3o r\u1eb1ng m\u1ed9t m\u1ea3ng l\u00e0 m\u1ed9t <i> \u0111\u1ed3ng nh\u1ea5t<\/i> d\u00e3y c\u00e1c ph\u1ea7n t\u1eed c\u00f9ng lo\u1ea1i.\u00a0 M\u1ed9t trong nh\u1eefng ki\u1ec3m tra ki\u1ec3u, c\u1ee5 th\u1ec3 l\u00e0 ki\u1ec3m tra c\u1eeda h\u00e0ng m\u1ea3ng \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n b\u1edfi m\u00e1y \u1ea3o trong th\u1eddi gian ch\u1ea1y, kh\u00f4ng ph\u00e1t hi\u1ec7n \u0111\u01b0\u1ee3c vi\u1ec7c ch\u00e8n ph\u1ea7n t\u1eed l\u1ea1 v\u00e0o vi ph\u1ea1m. Trong v\u00ed d\u1ee5, l\u1ea7n ch\u00e8n th\u1ee9 hai v\u00e0o <tt> th\u00eam ph\u1ea7n t\u1eed<\/tt> ph\u01b0\u01a1ng ph\u00e1p n\u00e0y s\u1ebd th\u1ea5t b\u1ea1i v\u00ec h\u1ecd \u0111\u00e3 th\u00eam m\u1ed9t c\u1eb7p chu\u1ed7i v\u00e0o m\u1ed9t m\u1ea3ng c\u00e1c gi\u00e1 tr\u1ecb nguy\u00ean, nh\u01b0ng n\u00f3 kh\u00f4ng th\u1ea5t b\u1ea1i nh\u01b0 mong \u0111\u1ee3i. Nh\u1eefng l\u00fd do \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ea3o lu\u1eadn trong m\u1ee5c tr\u01b0\u1edbc.<\/p>\n<p>N\u1ebfu ch\u00fang ta kh\u00f4ng th\u1ec3 s\u1eed d\u1ee5ng m\u1ea3ng ch\u1ee9a c\u00e1c ph\u1ea7n t\u1eed c\u00f3 lo\u1ea1i l\u00e0 lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 th\u00ec ch\u00fang ta s\u1ebd s\u1eed d\u1ee5ng gi\u1ea3i ph\u00e1p n\u00e0o?<\/p>\n<p>Ch\u00fang ta h\u00e3y xem x\u00e9t 3 c\u00e1ch gi\u1ea3i quy\u1ebft c\u00f3 th\u1ec3 hi\u1ec3u \u0111\u01b0\u1ee3c:<\/p>\n<ul>\n<li>m\u1ea3ng c\u00e1c lo\u1ea1i th\u00f4<\/li>\n<li>m\u1ea3ng ki\u1ec3u tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n kh\u00f4ng gi\u1edbi h\u1ea1n<\/li>\n<li>b\u1ed9 s\u01b0u t\u1eadp thay v\u00ec m\u1ea3ng<\/li>\n<\/ul>\n<p>M\u1eb7c d\u00f9 m\u1ea3ng c\u00e1c ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 l\u00e0 b\u1ea5t h\u1ee3p ph\u00e1p nh\u01b0ng vi\u1ec7c t\u1eadp h\u1ee3p c\u00e1c ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 \u0111\u01b0\u1ee3c cho ph\u00e9p.<\/p>\n<p>Lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n l\u00e0 s\u1ef1 kh\u1edfi t\u1ea1o c\u1ee7a lo\u1ea1i chung trong \u0111\u00f3 \u00edt nh\u1ea5t m\u1ed9t \u0111\u1ed1i s\u1ed1 lo\u1ea1i l\u00e0 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n.\u00a0 V\u00ed d\u1ee5 v\u1ec1 c\u00e1c lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n l\u00e0 <tt> B\u1ed9 s\u01b0u t\u1eadp&lt;?&gt;<\/tt> , <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> , <tt> B\u1ed9 so s\u00e1nh&lt;? si\u00eau String&gt;<\/tt> V\u00e0 <tt> Pair&lt;String,?&gt;<\/tt> . Lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a b\u1eb1ng k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n bi\u1ec3u th\u1ecb m\u1ed9t nh\u00f3m lo\u1ea1i bao g\u1ed3m c\u00e1c ph\u1ea7n th\u1ec3 hi\u1ec7n c\u1ee5 th\u1ec3 c\u1ee7a m\u1ed9t lo\u1ea1i chung.\u00a0 Lo\u1ea1i k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n \u0111ang \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng s\u1ebd x\u00e1c \u0111\u1ecbnh lo\u1ea1i tham s\u1ed1 c\u1ee5 th\u1ec3 n\u00e0o thu\u1ed9c v\u1ec1 h\u1ecd.\u00a0 V\u00ed d\u1ee5: ki\u1ec3u tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n <tt> B\u1ed9 s\u01b0u t\u1eadp&lt;?&gt;<\/tt> bi\u1ec3u th\u1ecb h\u1ecd c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c hi\u1ec7n t\u01b0\u1ee3ng c\u1ee7a <tt> B\u1ed9 s\u01b0u t\u1eadp<\/tt> giao di\u1ec7n b\u1ea5t k\u1ec3 \u0111\u1ed1i s\u1ed1 lo\u1ea1i.\u00a0 Lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> bi\u1ec3u th\u1ecb h\u1ecd c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c lo\u1ea1i danh s\u00e1ch trong \u0111\u00f3 lo\u1ea1i ph\u1ea7n t\u1eed l\u00e0 ki\u1ec3u con c\u1ee7a\u00a0 <tt> Con s\u1ed1<\/tt> .\u00a0 Lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n <tt> B\u1ed9 so s\u00e1nh&lt;? si\u00eau String&gt;<\/tt> l\u00e0 h\u1ecd c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c hi\u1ec7n t\u01b0\u1ee3ng c\u1ee7a <tt> B\u1ed9 so s\u00e1nh<\/tt> giao di\u1ec7n cho c\u00e1c lo\u1ea1i \u0111\u1ed1i s\u1ed1 ki\u1ec3u l\u00e0 si\u00eau ki\u1ec3u c\u1ee7a <tt> S\u1ee3i d\u00e2y.<\/tt><\/p>\n<p><strong><em>Lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n kh\u00f4ng ph\u1ea3i l\u00e0 lo\u1ea1i theo ngh\u0129a th\u00f4ng th\u01b0\u1eddng (kh\u00e1c v\u1edbi l\u1edbp\/giao di\u1ec7n kh\u00f4ng \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a ho\u1eb7c lo\u1ea1i th\u00f4).<\/em> <\/strong><\/p>\n<p>C\u00e1c lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 g\u00f5 (nh\u01b0 c\u00e1c l\u1edbp v\u00e0 giao di\u1ec7n kh\u00f4ng \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a):<\/p>\n<ul>\n<li>l\u00e0m \u0111\u1ed1i s\u1ed1 v\u00e0 tr\u1ea3 v\u1ec1 c\u00e1c ki\u1ec3u ph\u01b0\u01a1ng th\u1ee9c<\/li>\n<li>d\u01b0\u1edbi d\u1ea1ng lo\u1ea1i tr\u01b0\u1eddng ho\u1eb7c bi\u1ebfn tham chi\u1ebfu c\u1ee5c b\u1ed9<\/li>\n<li>l\u00e0 ki\u1ec3u th\u00e0nh ph\u1ea7n c\u1ee7a \u0111\u1ed1i s\u1ed1 ki\u1ec3u arrayas c\u1ee7a c\u00e1c ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a kh\u00e1c<\/li>\n<li>l\u00e0m lo\u1ea1i m\u1ee5c ti\u00eau trong d\u00e0n di\u1ec5n vi\u00ean<\/li>\n<\/ul>\n<p>Kh\u00f4ng ch\u1ec9 c\u00e1c ki\u1ec3u c\u00f3 th\u1ec3 chung chung m\u00e0 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c c\u0169ng c\u00f3 th\u1ec3 chung chung. C\u00e1c ph\u01b0\u01a1ng th\u1ee9c t\u0129nh v\u00e0 kh\u00f4ng t\u0129nh c\u0169ng nh\u01b0 c\u00e1c h\u00e0m t\u1ea1o c\u00f3 th\u1ec3 c\u00f3 c\u00e1c tham s\u1ed1 ki\u1ec3u. C\u00fa ph\u00e1p khai b\u00e1o c\u00e1c tham s\u1ed1 ki\u1ec3u ch\u00ednh th\u1ee9c t\u01b0\u01a1ng t\u1ef1 nh\u01b0 c\u00fa ph\u00e1p cho ki\u1ec3u generic. Ph\u1ea7n tham s\u1ed1 lo\u1ea1i \u0111\u01b0\u1ee3c ph\u00e2n c\u00e1ch b\u1eb1ng d\u1ea5u ngo\u1eb7c nh\u1ecdn v\u00e0 xu\u1ea5t hi\u1ec7n tr\u01b0\u1edbc ki\u1ec3u tr\u1ea3 v\u1ec1 c\u1ee7a ph\u01b0\u01a1ng th\u1ee9c. C\u00fa ph\u00e1p v\u00e0 \u00fd ngh\u0129a c\u1ee7a n\u00f3 gi\u1ed1ng h\u1ec7t v\u1edbi danh s\u00e1ch tham s\u1ed1 lo\u1ea1i c\u1ee7a lo\u1ea1i chung.<\/p>\n<p>\u0110\u00e2y l\u00e0 v\u00ed d\u1ee5 v\u1ec1 m\u1ed9t c\u00e1i chung <tt> t\u1ed1i \u0111a<\/tt> ph\u01b0\u01a1ng th\u1ee9c t\u00ednh gi\u00e1 tr\u1ecb l\u1edbn nh\u1ea5t trong t\u1eadp h\u1ee3p c\u00e1c ph\u1ea7n t\u1eed thu\u1ed9c lo\u1ea1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh <tt> M\u1ed8T<\/tt> .<\/p>\n<p>V\u00ed d\u1ee5 (c\u1ee7a m\u1ed9t ph\u01b0\u01a1ng ph\u00e1p chung):<\/p>\n<blockquote><p><tt> B\u1ed9 s\u01b0u t\u1eadp l\u1edbp {<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng t\u0129nh <b> <span style=\"color:#000099;\"> &lt;A m\u1edf r\u1ed9ng C\u00f3 th\u1ec3 so s\u00e1nh&lt;A&gt;&gt; A<\/span> <\/b> max(B\u1ed9 s\u01b0u t\u1eadp&lt;<b> <span style=\"color:#000099;\"> M\u1ed8T<\/span> <\/b> &gt; xs) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Tr\u00ecnh l\u1eb7p&lt;<b> <span style=\"color:#000099;\"> M\u1ed8T<\/span> <\/b> &gt; xi = xs.iterator();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> M\u1ed8T<\/span> <\/b> w = xi.next();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 trong khi (xi.hasNext()) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> M\u1ed8T<\/span> <\/b> x = xi.next();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 if (w.compareTo(x) &lt; 0) w = x;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 tr\u1edf l\u1ea1i w;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p><\/blockquote>\n<p>c\u00e1c <tt> t\u1ed1i \u0111a<\/tt> ph\u01b0\u01a1ng th\u1ee9c c\u00f3 m\u1ed9t tham s\u1ed1 ki\u1ec3u, \u0111\u01b0\u1ee3c \u0111\u1eb7t t\u00ean<tt> M\u1ed8T<\/tt> .\u00a0 N\u00f3 l\u00e0 m\u1ed9t tr\u00ecnh gi\u1eef ch\u1ed7 cho lo\u1ea1i ph\u1ea7n t\u1eed c\u1ee7a b\u1ed9 s\u01b0u t\u1eadp m\u00e0 ph\u01b0\u01a1ng th\u1ee9c n\u00e0y ho\u1ea1t \u0111\u1ed9ng. Tham s\u1ed1 lo\u1ea1i c\u00f3 gi\u1edbi h\u1ea1n; n\u00f3 ph\u1ea3i l\u00e0 m\u1ed9t lo\u1ea1i l\u00e0 m\u1ed9t ki\u1ec3u con c\u1ee7a <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;A&gt;<\/tt><\/p>\n<p>V\u00ed d\u1ee5 (c\u00f9ng lo\u1ea1i chung, l\u1ea7n n\u00e0y <i> v\u1edbi<\/i> gi\u1edbi h\u1ea1n):<\/p>\n<blockquote><p><tt> giao di\u1ec7n c\u00f4ng c\u1ed9ng C\u00f3 th\u1ec3 so s\u00e1nh&lt;T&gt; {<\/tt><br \/>\n<tt> \u00a0 int c\u00f4ng khai so s\u00e1nhTo(T arg);<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> l\u1edbp c\u00f4ng khai TreeMap&lt;Key <b> <span style=\"color:#000066;\"> m\u1edf r\u1ed9ng So s\u00e1nh&lt;Key&gt;<\/span> <\/b> ,D\u1eef li\u1ec7u&gt;{<\/tt><br \/>\n<tt> \u00a0 l\u1edbp t\u0129nh ri\u00eang Entry&lt;K,V&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 ph\u00edm K;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 gi\u00e1 tr\u1ecb V;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; left = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K,V&gt; ph\u1ea3i = null;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;K, cha m\u1eb9 V&gt;;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 tho\u00e1ng qua ri\u00eang t\u01b0 Entry&lt;Key,Data&gt; root = null;<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> \u00a0 ri\u00eang Entry&lt;Key,Data&gt; getEntry(Kh\u00f3a kh\u00f3a) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Entry&lt;Key,Data&gt; p = root;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 Ph\u00edm k = ph\u00edm;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 trong khi (p != null) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 int cmp = k.<b> <span style=\"color:#990000;\"> so s\u00e1nh(p.key)<\/span> <\/b> ;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 n\u1ebfu (cmp == 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 l\u1ea1i p;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 kh\u00e1c n\u1ebfu (cmp &lt; 0)<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.left;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 kh\u00e1c\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p = p.right;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 gi\u00e1 tr\u1ecb r\u1ed7ng;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 boolean c\u00f4ng khai ch\u1ee9aKey(Kh\u00f3a kh\u00f3a) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 getEntry(key) != null;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Trong v\u00ed d\u1ee5 tr\u00ean, tham s\u1ed1 ki\u1ec3u <tt> Ch\u00eca kh\u00f3a<\/tt> c\u00f3 gi\u1edbi h\u1ea1n <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;Key&gt;<\/tt> .\u00a0 Vi\u1ec7c x\u00e1c \u0111\u1ecbnh gi\u1edbi h\u1ea1n c\u00f3 hai t\u00e1c d\u1ee5ng:<\/p>\n<ul>\n<li><i> N\u00f3 cho ph\u00e9p truy c\u1eadp v\u00e0o c\u00e1c ph\u01b0\u01a1ng th\u1ee9c m\u00e0 gi\u1edbi h\u1ea1n ch\u1ec9 \u0111\u1ecbnh<\/i> .\u00a0 Trong v\u00ed d\u1ee5, r\u00e0ng bu\u1ed9c <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;Key&gt; <\/tt> c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o <tt> so s\u00e1nhTo<\/tt> ph\u01b0\u01a1ng th\u1ee9c m\u00e0 ch\u00fang t\u00f4i mu\u1ed1n g\u1ecdi trong qu\u00e1 tr\u00ecnh tri\u1ec3n khai <tt> B\u1ea3n \u0111\u1ed3 c\u00e2y<\/tt> l\u1edbp h\u1ecdc.<\/li>\n<\/ul>\n<ul>\n<li><i> Ch\u1ec9 c\u00e1c lo\u1ea1i &#8220;trong gi\u1edbi h\u1ea1n&#8221; m\u1edbi c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 kh\u1edfi t\u1ea1o lo\u1ea1i chung.<\/i> \u00a0 Trong v\u00ed d\u1ee5, m\u1ed9t lo\u1ea1i tham s\u1ed1 h\u00f3a nh\u01b0 <tt> C\u00e2yB\u1ea3n \u0111\u1ed3&lt;S\u1ed1,Chu\u1ed7i&gt;<\/tt> s\u1ebd b\u1ecb t\u1eeb ch\u1ed1i, b\u1edfi v\u00ec lo\u1ea1i <tt> Con s\u1ed1<\/tt> kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t ki\u1ec3u con c\u1ee7a <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;S\u1ed1&gt;<\/tt> .\u00a0 M\u1ed9t lo\u1ea1i tham s\u1ed1 nh\u01b0 <tt> TreeMap&lt;Chu\u1ed7i,Chu\u1ed7i&gt;<\/tt> s\u1ebd \u0111\u01b0\u1ee3c ch\u1ea5p nh\u1eadn, v\u00ec ki\u1ec3u Chu\u1ed7i n\u1eb1m trong gi\u1edbi h\u1ea1n, t\u1ee9c l\u00e0 l\u00e0 ki\u1ec3u con c\u1ee7a <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;String&gt;<\/tt> .<\/li>\n<\/ul>\n<p>T\u1ea5t c\u1ea3 c\u00e1c l\u1edbp, giao di\u1ec7n v\u00e0 ki\u1ec3u enum c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n tham s\u1ed1 ki\u1ec3u, bao g\u1ed3m c\u1ea3 ki\u1ec3u l\u1ed3ng nhau v\u00e0 ki\u1ec3u b\u00ean trong.\u00a0 C\u1ea3 ki\u1ec3u nguy\u00ean th\u1ee7y v\u00e0 ki\u1ec3u m\u1ea3ng \u0111\u1ec1u kh\u00f4ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n tham s\u1ed1 ki\u1ec3u.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i):<\/p>\n<blockquote><p><tt> l\u1edbp X0 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> int<\/span> <\/b> &gt; { ... }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> l\u1edbp X1 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> S\u1ef1 v\u1eadt[]<\/span> <\/b> &gt; { ... } <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> l\u1edbp X2 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Con s\u1ed1<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X3 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> S\u1ee3i d\u00e2y<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X4 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> C\u00f3 th\u1ec3 ch\u1ea1y \u0111\u01b0\u1ee3c<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X5 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Ch\u1ee7 \u0111\u1ec1.State<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X6 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Danh s\u00e1ch<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X7 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Danh s\u00e1ch&lt;String&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X8 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X9 &lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> C\u00f3 th\u1ec3 so s\u00e1nh&lt;? si\u00eau S\u1ed1&gt;<\/span> <\/b> &gt; { ... }<\/tt><br \/>\n<tt> l\u1edbp X10&lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#000099;\"> Map.Entry&lt;?,?&gt;<\/span> <\/b> &gt; { ... }<\/tt><\/p><\/blockquote>\n<p>M\u1eabu m\u00e3 cho th\u1ea5y c\u00e1c ki\u1ec3u nguy\u00ean th\u1ee7y nh\u01b0 <tt> int<\/tt> v\u00e0 c\u00e1c ki\u1ec3u m\u1ea3ng nh\u01b0 <tt> S\u1ef1 v\u1eadt[] <\/tt> kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m tham s\u1ed1 lo\u1ea1i b\u1ecb r\u00e0ng bu\u1ed9c.<\/p>\n<p>C\u00e1c lo\u1ea1i l\u1edbp, ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> Con s\u1ed1<\/tt> ho\u1eb7c <tt> S\u1ee3i d\u00e2y<\/tt> v\u00e0 c\u00e1c lo\u1ea1i giao di\u1ec7n, ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> C\u00f3 th\u1ec3 ch\u1ea1y \u0111\u01b0\u1ee3c<\/tt> , \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m tham s\u1ed1 lo\u1ea1i b\u1ecb r\u00e0ng bu\u1ed9c.<\/p>\n<p>C\u00e1c lo\u1ea1i Enum, ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> Ch\u1ee7 \u0111\u1ec1.State<\/tt> c\u0169ng \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m tham s\u1ed1 lo\u1ea1i b\u1ecb r\u00e0ng bu\u1ed9c. <tt> Ch\u1ee7 \u0111\u1ec1.State<\/tt> l\u00e0 m\u1ed9t v\u00ed d\u1ee5 v\u1ec1 ki\u1ec3u l\u1ed3ng nhau \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n tham s\u1ed1 ki\u1ec3u.\u00a0 C\u00e1c lo\u1ea1i b\u00ean trong kh\u00f4ng t\u0129nh c\u0169ng \u0111\u01b0\u1ee3c cho ph\u00e9p.<\/p>\n<p>C\u00e1c lo\u1ea1i th\u00f4 \u0111\u01b0\u1ee3c cho ph\u00e9p d\u01b0\u1edbi d\u1ea1ng gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i; <tt> <span style=\"color:#000000;\"> Danh s\u00e1ch<\/span> <\/tt> l\u00e0 m\u1ed9t v\u00ed d\u1ee5<\/p>\n<p>C\u00e1c lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a \u0111\u01b0\u1ee3c cho ph\u00e9p d\u01b0\u1edbi d\u1ea1ng gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i, bao g\u1ed3m c\u00e1c lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee5 th\u1ec3 nh\u01b0 <tt> Danh s\u00e1ch&lt;String&gt;<\/tt> , c\u00e1c lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n gi\u1edbi h\u1ea1n nh\u01b0 <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> V\u00e0 <tt> C\u00f3 th\u1ec3 so s\u00e1nh&lt;? si\u00eau d\u00e0i&gt;<\/tt> v\u00e0 c\u00e1c lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n kh\u00f4ng gi\u1edbi h\u1ea1n, ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> Map.Entry&lt;?,?&gt;<\/tt> .\u00a0 Gi\u1edbi h\u1ea1n l\u00e0 lo\u1ea1i \u0111\u01b0\u1ee3c tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n cho ph\u00e9p l\u00e0m \u0111\u1ed1i s\u1ed1 lo\u1ea1i t\u1ea5t c\u1ea3 c\u00e1c lo\u1ea1i thu\u1ed9c v\u1ec1 h\u1ecd lo\u1ea1i m\u00e0 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n bi\u1ec3u th\u1ecb.\u00a0 Gi\u1edbi h\u1ea1n lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n ch\u1ec9 cung c\u1ea5p quy\u1ec1n truy c\u1eadp h\u1ea1n ch\u1ebf v\u00e0o c\u00e1c tr\u01b0\u1eddng v\u00e0 ph\u01b0\u01a1ng th\u1ee9c; c\u00e1c h\u1ea1n ch\u1ebf ph\u1ee5 thu\u1ed9c v\u00e0o lo\u1ea1i k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n l\u00e0 gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i):<\/p>\n<blockquote><p><tt> l\u1edbp X&lt;<b> <span style=\"color:#000099;\"> T m\u1edf r\u1ed9ng List&lt;? m\u1edf r\u1ed9ng Number&gt;<\/span> <\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0 public void someMethod(T t) {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 t.add(d\u00e0i m\u1edbi(0L));\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 S\u1ed1 n = t.remove(0);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> Ki\u1ec3m tra l\u1edbp {<\/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;\"> D\u00e0i<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x1 = X&lt;ArrayList&lt;Long&gt;&gt; m\u1edbi();\u00a0<\/span> <\/tt><br \/>\n<tt> <span style=\"color:#000000;\"> \u00a0\u00a0\u00a0\u00a0 X&lt;ArrayList&lt;<\/span> <b> <span style=\"color:#000099;\"> S\u1ee3i d\u00e2y<\/span> <\/b> <span style=\"color:#000000;\"> &gt;&gt; x2 = X&lt;ArrayList&lt;String&gt;&gt; m\u1edbi(); <\/span> <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>C\u00e1c bi\u1ebfn tham chi\u1ebfu thu\u1ed9c lo\u1ea1i<tt> T <\/tt> (tham s\u1ed1 lo\u1ea1i) \u0111\u01b0\u1ee3c x\u1eed l\u00fd gi\u1ed1ng nh\u01b0 c\u00e1c bi\u1ebfn tham chi\u1ebfu c\u1ee7a lo\u1ea1i k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n (tham s\u1ed1 lo\u1ea1i b\u1ecb r\u00e0ng bu\u1ed9c).\u00a0 Trong v\u00ed d\u1ee5 c\u1ee7a ch\u00fang ta, h\u1eadu qu\u1ea3 l\u00e0 tr\u00ecnh bi\u00ean d\u1ecbch t\u1eeb ch\u1ed1i vi\u1ec7c g\u1ecdi c\u00e1c ph\u01b0\u01a1ng th\u1ee9c l\u1ea5y \u0111\u1ed1i s\u1ed1 thu\u1ed9c lo\u1ea1i &#8220;kh\u00f4ng x\u00e1c \u0111\u1ecbnh&#8221; m\u00e0 tham s\u1ed1 lo\u1ea1i \u0111\u1ea1i di\u1ec7n, ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> Danh s\u00e1ch.add<\/tt> , v\u00ec gi\u1edbi h\u1ea1n l\u00e0 lo\u1ea1i tham s\u1ed1 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n c\u00f3 gi\u1edbi h\u1ea1n tr\u00ean.<br \/>\n\u0110\u1ed3ng th\u1eddi s\u1ef1 r\u00e0ng bu\u1ed9c <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> x\u00e1c \u0111\u1ecbnh c\u00e1c lo\u1ea1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m \u0111\u1ed1i s\u1ed1 lo\u1ea1i. Tr\u00ecnh bi\u00ean d\u1ecbch ch\u1ea5p nh\u1eadn t\u1ea5t c\u1ea3 c\u00e1c \u0111\u1ed1i s\u1ed1 ki\u1ec3u thu\u1ed9c h\u1ecd ki\u1ec3u <tt> Danh s\u00e1ch&lt;? m\u1edf r\u1ed9ng Number&gt;<\/tt> , ngh\u0129a l\u00e0, t\u1ea5t c\u1ea3 c\u00e1c ki\u1ec3u con c\u1ee7a <tt> Danh s\u00e1ch<\/tt> v\u1edbi m\u1ed9t \u0111\u1ed1i s\u1ed1 ki\u1ec3u l\u00e0 m\u1ed9t ki\u1ec3u con c\u1ee7a <tt> Con s\u1ed1<\/tt> .<\/p>\n<p>M\u1ed9t tham s\u1ed1 lo\u1ea1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n c\u1ee7a m\u1ed9t tham s\u1ed1 lo\u1ea1i kh\u00e1c.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 tham s\u1ed1 lo\u1ea1i \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i):<\/p>\n<blockquote><p><tt> l\u1edbp ba<b> &lt;T&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 tin T fst, snd, trd;<\/tt><br \/>\n<tt> \u00a0 &lt; c\u00f4ng khai<b> b\u1ea1n<\/b> <b> <span style=\"color:#000099;\"> m\u1edf r\u1ed9ng T<\/span> <\/b> , <b> V. <span style=\"color:#000099;\"> m\u1edf r\u1ed9ng T<\/span> <\/b> , <b> W <span style=\"color:#000099;\"> m\u1edf r\u1ed9ng T<\/span> <\/b> &gt; B\u1ed9 ba(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>Trong v\u00ed d\u1ee5 n\u00e0y, tham s\u1ed1 ki\u1ec3u <tt> T<\/tt> c\u1ee7a l\u1edbp \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n c\u1ee7a c\u00e1c tham s\u1ed1 ki\u1ec3u <tt> b\u1ea1n<\/tt> ,\u00a0 <tt> V.<\/tt> V\u00e0 <tt> W<\/tt> c\u1ee7a m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c c\u00e1 th\u1ec3 \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a c\u1ee7a l\u1edbp \u0111\u00f3.<\/p>\n<p>C\u00e1c c\u01a1 h\u1ed9i kh\u00e1c \u0111\u1ec3 s\u1eed d\u1ee5ng c\u00e1c tham s\u1ed1 ki\u1ec3u l\u00e0m gi\u1edbi h\u1ea1n c\u1ee7a c\u00e1c tham s\u1ed1 ki\u1ec3u kh\u00e1c bao g\u1ed3m c\u00e1c t\u00ecnh hu\u1ed1ng trong \u0111\u00f3 ki\u1ec3u l\u1ed3ng nhau \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh b\u00ean trong m\u1ed9t ki\u1ec3u chung ho\u1eb7c m\u1ed9t l\u1edbp c\u1ee5c b\u1ed9 \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a b\u00ean trong m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c chung.\u00a0 N\u00f3 th\u1eadm ch\u00ed c\u00f2n \u0111\u01b0\u1ee3c ph\u00e9p s\u1eed d\u1ee5ng m\u1ed9t tham s\u1ed1 lo\u1ea1i l\u00e0m gi\u1edbi h\u1ea1n c\u1ee7a m\u1ed9t tham s\u1ed1 lo\u1ea1i kh\u00e1c trong c\u00f9ng ph\u1ea7n tham s\u1ed1 lo\u1ea1i.<\/p>\n<p>M\u1ed9t r\u00e0ng bu\u1ed9c l\u00e0 m\u1ed9t l\u1edbp cung c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c th\u00e0nh vi\u00ean c\u00f4ng khai c\u1ee7a n\u00f3, ngh\u0129a l\u00e0 c\u00e1c tr\u01b0\u1eddng c\u00f4ng khai, ph\u01b0\u01a1ng th\u1ee9c v\u00e0 ki\u1ec3u l\u1ed3ng nhau. Ch\u1ec9 c\u00e1c h\u00e0m t\u1ea1o l\u00e0 kh\u00f4ng th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c v\u00ec kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ea3m b\u1ea3o r\u1eb1ng m\u1ed9t l\u1edbp con c\u1ee7a li\u00ean k\u1ebft c\u00f3 c\u00f9ng c\u00e1c h\u00e0m t\u1ea1o nh\u01b0 li\u00ean k\u1ebft.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 m\u1ed9t l\u1edbp \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m gi\u1edbi h\u1ea1n c\u1ee7a tham s\u1ed1 lo\u1ea1i):<\/p>\n<blockquote><p><tt> l\u1edbp c\u00f4ng c\u1ed9ng <span style=\"color:#000000;\"> si\u00eau l\u1edbp<\/span> {<\/tt><tt> \u00a0\u00a0\u00a0 \/\/ th\u00e0nh vi\u00ean t\u0129nh<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public enum EnumType {\u0110\u00c2Y, \u0110\u00d3}<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0111\u1ed1i t\u01b0\u1ee3ng t\u0129nh c\u00f4ng khai staticField;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public static void staticMethod() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 l\u1edbp c\u00f4ng khai InnerClass { ... }<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0110\u1ed1i t\u01b0\u1ee3ng c\u00f4ng khai nonStaticField;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public void nonStaticMethod() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ h\u00e0m t\u1ea1o<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 SuperClass c\u00f4ng khai() { ... }<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 \/\/ th\u00e0nh vi\u00ean ri\u00eang t\u01b0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0110\u1ed1i t\u01b0\u1ee3ng ri\u00eang t\u01b0Field;\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<p><tt> l\u1edbp cu\u1ed1i c\u00f9ng c\u00f4ng khai SomeClass&lt;T m\u1edf r\u1ed9ng <b> <span style=\"color:#006600;\"> si\u00eau l\u1edbp<\/span> <\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0111\u1ed1i t\u01b0\u1ee3ng T ri\u00eang t\u01b0;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 c\u00f4ng khai SomeClass(T t) { object = t; }\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0 Chu\u1ed7i c\u00f4ng khai toString() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1edf l\u1ea1i<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \"ki\u1ec3u l\u1ed3ng t\u0129nh\u00a0\u00a0\u00a0 : \"+T.EnumType.class+\"\\n\"\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"tr\u01b0\u1eddng t\u0129nh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"ph\u01b0\u01a1ng th\u1ee9c t\u0129nh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+T.staticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"ki\u1ec3u l\u1ed3ng nhau kh\u00f4ng t\u0129nh: \"+T.InnerClass.class+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"tr\u01b0\u1eddng kh\u00f4ng t\u0129nh\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticField+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"ph\u01b0\u01a1ng th\u1ee9c kh\u00f4ng t\u0129nh\u00a0\u00a0\u00a0\u00a0 : \"+object.nonStaticMethod()+\"\\n\"<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"constructor\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+(new T())+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ l\u1ed7i<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 +\"th\u00e0nh vi\u00ean ri\u00eang t\u01b0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 : \"+object.privateField+\"\\n\"\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ l\u1ed7i\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>S\u1ef1 r\u00e0ng bu\u1ed9c <tt> si\u00eau l\u1edbp<\/tt> c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o c\u00e1c ki\u1ec3u l\u1ed3ng nhau, c\u00e1c tr\u01b0\u1eddng v\u00e0 ph\u01b0\u01a1ng th\u1ee9c t\u0129nh c\u0169ng nh\u01b0 c\u00e1c tr\u01b0\u1eddng v\u00e0 ph\u01b0\u01a1ng th\u1ee9c kh\u00f4ng t\u0129nh.\u00a0 Ch\u1ec9 c\u00f3 h\u00e0m t\u1ea1o l\u00e0 kh\u00f4ng th\u1ec3 truy c\u1eadp \u0111\u01b0\u1ee3c.\u00a0 \u0110i\u1ec1u n\u00e0y l\u00e0 do h\u00e0m t\u1ea1o kh\u00f4ng \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba. M\u1ed7i l\u1edbp con \u0111\u1ecbnh ngh\u0129a c\u00e1c h\u00e0m t\u1ea1o ri\u00eang c\u1ee7a n\u00f3 v\u00e0 kh\u00f4ng c\u1ea7n h\u1ed7 tr\u1ee3 c\u00e1c h\u00e0m t\u1ea1o c\u1ee7a l\u1edbp cha c\u1ee7a n\u00f3.\u00a0 Do \u0111\u00f3 kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ea3m b\u1ea3o r\u1eb1ng m\u1ed9t l\u1edbp con c\u1ee7a <tt> si\u00eau l\u1edbp<\/tt> s\u1ebd c\u00f3 c\u00f9ng h\u00e0m t\u1ea1o v\u1edbi si\u00eau l\u1edbp c\u1ee7a n\u00f3.<\/p>\n<p>B\u1ed1i c\u1ea3nh trong \u0111\u00f3<tt> Enum&lt;E m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/tt> &#8221; xu\u1ea5t hi\u1ec7n l\u00e0 l\u1eddi tuy\u00ean b\u1ed1 c\u1ee7a <tt> li\u1ec7t k\u00ea<\/tt> l\u1edbp trong g\u00f3i <tt> java.lang<\/tt> :<\/p>\n<blockquote><p><tt> l\u1edbp tr\u1eebu t\u01b0\u1ee3ng c\u00f4ng c\u1ed9ng <b> Enum&lt;E m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Lo\u1ea1i <tt> li\u1ec7t k\u00ea<\/tt> l\u00e0 l\u1edbp c\u01a1 s\u1edf chung c\u1ee7a t\u1ea5t c\u1ea3 c\u00e1c ki\u1ec3u li\u1ec7t k\u00ea.\u00a0 Trong Java m\u1ed9t ki\u1ec3u li\u1ec7t k\u00ea nh\u01b0 <tt> M\u00e0u s\u1eafc<\/tt> \u0111\u01b0\u1ee3c d\u1ecbch th\u00e0nh m\u1ed9t l\u1edbp <tt> M\u00e0u s\u1eafc<\/tt> \u0111i\u1ec1u \u0111\u00f3 m\u1edf r\u1ed9ng <tt> Enum&lt;Color&gt;<\/tt> . M\u1ee5c \u0111\u00edch c\u1ee7a si\u00eau l\u1edbp <tt> li\u1ec7t k\u00ea<\/tt> l\u00e0 cung c\u1ea5p ch\u1ee9c n\u0103ng chung cho t\u1ea5t c\u1ea3 c\u00e1c ki\u1ec3u li\u1ec7t k\u00ea.<\/p>\n<p>\u0110\u00e2y l\u00e0 b\u1ea3n ph\u00e1c th\u1ea3o c\u1ee7a l\u1edbp <tt> li\u1ec7t k\u00ea<\/tt> :<\/p>\n<blockquote><p><tt> l\u1edbp tr\u1eebu t\u01b0\u1ee3ng c\u00f4ng c\u1ed9ng <b> Enum&lt;<span style=\"color:#000099;\"> E<\/span> m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/b> th\u1ef1c hi\u1ec7n So s\u00e1nh&lt;<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt;, c\u00f3 th\u1ec3 tu\u1ea7n t\u1ef1 h\u00f3a {<\/tt><br \/>\n<tt> \u00a0 t\u00ean chu\u1ed7i cu\u1ed1i c\u00f9ng ri\u00eang t\u01b0;<\/tt><br \/>\n<tt> \u00a0 t\u00ean chu\u1ed7i cu\u1ed1i c\u00f9ng c\u00f4ng khai() { ... }<\/tt><tt> \u00a0 th\u1ee9 t\u1ef1 int cu\u1ed1i c\u00f9ng ri\u00eang t\u01b0;<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft c\u00f4ng khai int th\u1ee9 t\u1ef1() { ... }<\/tt><\/p>\n<p><tt> \u00a0 protected Enum(T\u00ean chu\u1ed7i, th\u1ee9 t\u1ef1 int) { ... }<\/tt><\/p>\n<p><tt> \u00a0 chu\u1ed7i c\u00f4ng khai\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 toString() { ... }<\/tt><br \/>\n<tt> \u00a0 boolean cu\u1ed1i c\u00f9ng c\u00f4ng khai b\u1eb1ng(\u0110\u1ed1i t\u01b0\u1ee3ng kh\u00e1c) { ... }<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft c\u00f4ng khai int hashCode() { ... }<\/tt><br \/>\n<tt> \u00a0 \u0111\u1ed1i t\u01b0\u1ee3ng cu\u1ed1i c\u00f9ng \u0111\u01b0\u1ee3c b\u1ea3o v\u1ec7 clone() n\u00e9m CloneNotSupportedException { ... }<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft c\u00f4ng khai int soTo(<b> <span style=\"color:#000099;\"> E<\/span> <\/b> o) { ... }<\/tt><\/p>\n<p><tt> \u00a0 tr\u1eadn chung k\u1ebft c\u00f4ng khai Class&lt;<b> <span style=\"color:#000099;\"> E<\/span> <\/b> &gt; getDeclaringClass() { ... }<\/tt><br \/>\n<tt> \u00a0 public static &lt;T m\u1edf r\u1ed9ng Enum&lt;T&gt;&gt; T valueOf(Class&lt;T&gt; enumType, String name) { ... }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>\u0110i\u1ec3m b\u1ea5t ng\u1edd trong tuy\u00ean b\u1ed1 &#8220;<tt> Enum&lt;E m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/tt> &#8221; th\u1ef1c t\u1ebf l\u00e0 l\u1edbp m\u1edbi \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a <tt> li\u1ec7t k\u00ea<\/tt> v\u00e0 tham s\u1ed1 ki\u1ec3u m\u1edbi \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh c\u1ee7a n\u00f3 <tt> E <\/tt> xu\u1ea5t hi\u1ec7n trong gi\u1edbi h\u1ea1n c\u1ee7a tham s\u1ed1 c\u00f9ng lo\u1ea1i \u0111\u00f3.\u00a0 N\u00f3 c\u00f3 ngh\u0129a l\u00e0 <tt> li\u1ec7t k\u00ea<\/tt> lo\u1ea1i ph\u1ea3i \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o cho m\u1ed9t trong c\u00e1c ki\u1ec3u con c\u1ee7a n\u00f3.\u00a0 \u0110\u1ec3 hi\u1ec3u l\u00fd do t\u1ea1i sao \u0111i\u1ec1u n\u00e0y c\u00f3 \u00fd ngh\u0129a, h\u00e3y xem x\u00e9t r\u1eb1ng m\u1ecdi lo\u1ea1i enum \u0111\u1ec1u \u0111\u01b0\u1ee3c d\u1ecbch th\u00e0nh m\u1ed9t ki\u1ec3u con c\u1ee7a <tt> li\u1ec7t k\u00ea<\/tt> .<\/p>\n<p>\u0110\u00e2y l\u00e0 lo\u1ea1i enum gi\u1ea3 t\u1ea1o <tt> M\u00e0u s\u1eafc<\/tt> :<\/p>\n<blockquote><p><tt> li\u1ec7t k\u00ea <b> M\u00e0u s\u1eafc<\/b> {\u0110\u1ece, XANH, XANH}<\/tt><\/p><\/blockquote>\n<p>Tr\u00ecnh bi\u00ean d\u1ecbch d\u1ecbch n\u00f3 sang l\u1edbp sau:<\/p>\n<blockquote><p><tt> l\u1edbp cu\u1ed1i c\u00f9ng c\u00f4ng khai <b> M\u00e0u s\u1eafc<\/b> m\u1edf r\u1ed9ng <b> Enum&lt;Color&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0 public static Final Color[] value() { return (Color[])$VALUES.clone(); }<\/tt><br \/>\n<tt> \u00a0 gi\u00e1 tr\u1ecb m\u00e0u t\u0129nh c\u00f4ng khaiOf(T\u00ean chu\u1ed7i) { ... }<\/tt><tt> \u00a0 M\u00e0u ri\u00eang t\u01b0(Chu\u1ed7i s, int i) { super(s, i); }<\/tt><\/p>\n<p><tt> \u00a0 c\u00f4ng t\u0129nh cu\u1ed1i c\u00f9ng M\u00e0u \u0110\u1ece;<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng t\u0129nh cu\u1ed1i c\u00f9ng M\u00e0u XANH;<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng t\u0129nh cu\u1ed1i c\u00f9ng M\u00e0u XANH;<\/tt><\/p>\n<p><tt> \u00a0 M\u00e0u cu\u1ed1i c\u00f9ng t\u0129nh ri\u00eang t\u01b0 $VALUES[];<\/tt><\/p>\n<p><tt> \u00a0 t\u0129nh {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 \u0110\u1ece = M\u00e0u m\u1edbi (\"\u0110\u1ece\", 0);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 XANH = M\u00e0u m\u1edbi (\"XANH\", 1);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 XANH = M\u00e0u m\u1edbi (\"XANH\", 2);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 $VALUES = (M\u00e0u m\u1edbi[] { RED, BLUE, GREEN });<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Vi\u1ec7c th\u1eeba k\u1ebf c\u00f3 t\u00e1c d\u1ee5ng <tt> M\u00e0u s\u1eafc<\/tt> type k\u1ebf th\u1eeba t\u1ea5t c\u1ea3 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u01b0\u1ee3c tri\u1ec3n khai trong <tt> Enum&lt;Color&gt;<\/tt> .\u00a0 Trong s\u1ed1 \u0111\u00f3 c\u00f3 <tt> so s\u00e1nhTo<\/tt> ph\u01b0\u01a1ng ph\u00e1p.\u00a0 c\u00e1c <tt> M\u00e0u s\u1eafc. so s\u00e1nhTo<\/tt> ph\u01b0\u01a1ng ph\u00e1p c\u00f3 l\u1ebd n\u00ean m\u1ea5t m\u1ed9t <tt> M\u00e0u s\u1eafc<\/tt> nh\u01b0 m\u1ed9t l\u00fd l\u1ebd.\u00a0 \u0110\u1ec3 th\u1ef1c hi\u1ec7n \u0111\u01b0\u1ee3c \u0111i\u1ec1u n\u00e0y l\u1edbp <tt> li\u1ec7t k\u00ea<\/tt> l\u00e0 chung chung v\u00e0 <tt> Enum.compareTo<\/tt> ph\u01b0\u01a1ng ph\u00e1p m\u1ea5t <tt> li\u1ec7t k\u00ea<\/tt> tham s\u1ed1 ki\u1ec3u c\u1ee7a <tt> E <\/tt> nh\u01b0 m\u1ed9t l\u00fd l\u1ebd.\u00a0 K\u1ebft qu\u1ea3 l\u00e0, g\u00f5 <tt> M\u00e0u s\u1eafc<\/tt> b\u1eaft ngu\u1ed3n t\u1eeb <tt> Enum&lt;Color&gt;<\/tt> k\u1ebf th\u1eeba m\u1ed9t <tt> so s\u00e1nhTo<\/tt> ph\u01b0\u01a1ng ph\u00e1p \u0111\u00f3 c\u1ea7n m\u1ed9t <tt> M\u00e0u s\u1eafc<\/tt> nh\u01b0 v\u00e0 l\u1eadp lu\u1eadn, ch\u00ednh x\u00e1c nh\u01b0 n\u00f3 c\u1ea7n.<br \/>\nN\u1ebfu ch\u00fang ta m\u1ed5 x\u1ebb tuy\u00ean b\u1ed1 &#8220;<tt> Enum&lt;E m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/tt> &#8221; ch\u00fang ta c\u00f3 th\u1ec3 th\u1ea5y r\u1eb1ng m\u00f4 h\u00ecnh n\u00e0y c\u00f3 m\u1ed9t s\u1ed1 kh\u00eda c\u1ea1nh.<\/p>\n<p>\u0110\u1ea7u ti\u00ean, c\u00f3 m\u1ed9t th\u1ef1c t\u1ebf l\u00e0 tham s\u1ed1 lo\u1ea1i b\u1ecb r\u00e0ng bu\u1ed9c ch\u00ednh l\u00e0 lo\u1ea1i \u0111\u00f3: &#8220;<tt> <b> li\u1ec7t k\u00ea<\/b> &lt;E m\u1edf r\u1ed9ng <b> li\u1ec7t k\u00ea<\/b> &lt;E&gt;&gt;<\/tt> &#8220;. N\u00f3 \u0111\u1ea3m b\u1ea3o r\u1eb1ng ch\u1ec9 c\u00e1c ki\u1ec3u con c\u1ee7a ki\u1ec3u <tt> li\u1ec7t k\u00ea<\/tt> \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m \u0111\u1ed1i s\u1ed1 ki\u1ec3u. (V\u1ec1 m\u1eb7t l\u00fd thuy\u1ebft, lo\u1ea1i <tt> li\u1ec7t k\u00ea<\/tt> c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o tr\u00ean ch\u00ednh n\u00f3, gi\u1ed1ng nh\u01b0 trong <tt> Enum&lt;Enum&gt;<\/tt> , nh\u01b0ng \u0111i\u1ec1u n\u00e0y ch\u1eafc ch\u1eafn kh\u00f4ng c\u00f3 ch\u1ee7 \u00fd v\u00e0 th\u1eadt kh\u00f3 \u0111\u1ec3 t\u01b0\u1edfng t\u01b0\u1ee3ng m\u1ed9t t\u00ecnh hu\u1ed1ng trong \u0111\u00f3 vi\u1ec7c kh\u1edfi t\u1ea1o nh\u01b0 v\u1eady s\u1ebd h\u1eefu \u00edch.)<\/p>\n<p>Th\u1ee9 hai, c\u00f3 m\u1ed9t th\u1ef1c t\u1ebf l\u00e0 ki\u1ec3u li\u00ean k\u1ebft tham s\u1ed1 l\u00e0 ki\u1ec3u \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a <tt> li\u1ec7t k\u00ea<b> &lt;E&gt;<\/b> <\/tt> , s\u1eed d\u1ee5ng tham s\u1ed1 lo\u1ea1i <tt> E<\/tt> l\u00e0m \u0111\u1ed1i s\u1ed1 ki\u1ec3u c\u1ee7a gi\u1edbi h\u1ea1n. Tuy\u00ean b\u1ed1 n\u00e0y \u0111\u1ea3m b\u1ea3o r\u1eb1ng m\u1ed1i quan h\u1ec7 k\u1ebf th\u1eeba gi\u1eefa m\u1ed9t ki\u1ec3u con v\u00e0 m\u1ed9t s\u1ef1 th\u1ec3 hi\u1ec7n c\u1ee7a <tt> li\u1ec7t k\u00ea<\/tt> c\u00f3 d\u1ea1ng<tt> X m\u1edf r\u1ed9ng Enum&lt;X&gt;<\/tt> &#8220;. M\u1ed9t ki\u1ec3u con nh\u01b0 &#8220;<tt> X m\u1edf r\u1ed9ng Enum&lt;Y&gt;<\/tt> &#8221; kh\u00f4ng th\u1ec3 khai b\u00e1o v\u00ec \u0111\u1ed1i s\u1ed1 ki\u1ec3u <tt> Y<\/tt> s\u1ebd kh\u00f4ng n\u1eb1m trong gi\u1edbi h\u1ea1n; ch\u1ec9 c\u00e1c ki\u1ec3u con c\u1ee7a <tt> Enum&lt;X&gt;<\/tt> n\u1eb1m trong gi\u1edbi h\u1ea1n.<\/p>\n<p>Th\u1ee9 ba, c\u00f3 m\u1ed9t th\u1ef1c t\u1ebf l\u00e0 <tt> li\u1ec7t k\u00ea<\/tt> l\u00e0 chung chung \u1edf n\u01a1i \u0111\u1ea7u ti\u00ean.\u00a0 N\u00f3 c\u00f3 ngh\u0129a l\u00e0 m\u1ed9t s\u1ed1 ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a l\u1edbp <tt> li\u1ec7t k\u00ea<\/tt> l\u1ea5y m\u1ed9t \u0111\u1ed1i s\u1ed1 ho\u1eb7c tr\u1ea3 v\u1ec1 m\u1ed9t gi\u00e1 tr\u1ecb thu\u1ed9c lo\u1ea1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh (ho\u1eb7c n\u00f3i c\u00e1ch kh\u00e1c ph\u1ee5 thu\u1ed9c v\u00e0o lo\u1ea1i kh\u00f4ng x\u00e1c \u0111\u1ecbnh). Nh\u01b0 ch\u00fang ta \u0111\u00e3 bi\u1ebft, lo\u1ea1i ch\u01b0a bi\u1ebft n\u00e0y sau n\u00e0y s\u1ebd l\u00e0 m\u1ed9t lo\u1ea1i ph\u1ee5 <tt> X<\/tt> c\u1ee7a <tt> Enum&lt;X&gt;<\/tt> .\u00a0 Do \u0111\u00f3, trong ki\u1ec3u tham s\u1ed1 h\u00f3a <tt> Enum&lt;X&gt;<\/tt> , nh\u1eefng ph\u01b0\u01a1ng th\u1ee9c n\u00e0y li\u00ean quan \u0111\u1ebfn ki\u1ec3u con <tt> X<\/tt> v\u00e0 ch\u00fang \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba v\u00e0o ki\u1ec3u con <tt> X<\/tt> .\u00a0 c\u00e1c <tt> so s\u00e1nhTo<\/tt> ph\u01b0\u01a1ng ph\u00e1p l\u00e0 m\u1ed9t v\u00ed d\u1ee5 v\u1ec1 ph\u01b0\u01a1ng ph\u00e1p \u0111\u00f3; n\u00f3 \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba t\u1eeb l\u1edbp cha v\u00e0o t\u1eebng l\u1edbp con v\u00e0 c\u00f3 m\u1ed9t ch\u1eef k\u00fd c\u1ee5 th\u1ec3 c\u1ee7a l\u1edbp con trong t\u1eebng tr\u01b0\u1eddng h\u1ee3p.<\/p>\n<p>T\u00f3m l\u1ea1i, tuy\u00ean b\u1ed1 &#8220;<tt> Enum&lt;E m\u1edf r\u1ed9ng Enum&lt;E&gt;&gt;<\/tt> &#8221; c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c gi\u1ea3i m\u00e3 l\u00e0: <tt> li\u1ec7t k\u00ea<\/tt> l\u00e0 m\u1ed9t lo\u1ea1i chung ch\u1ec9 c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o cho c\u00e1c ki\u1ec3u con c\u1ee7a n\u00f3 v\u00e0 c\u00e1c ki\u1ec3u con \u0111\u00f3 s\u1ebd k\u1ebf th\u1eeba m\u1ed9t s\u1ed1 ph\u01b0\u01a1ng th\u1ee9c h\u1eefu \u00edch, m\u1ed9t s\u1ed1 trong \u0111\u00f3 l\u1ea5y c\u00e1c \u0111\u1ed1i s\u1ed1 c\u1ee5 th\u1ec3 c\u1ee7a ki\u1ec3u con (ho\u1eb7c n\u00f3i c\u00e1ch kh\u00e1c l\u00e0 ph\u1ee5 thu\u1ed9c v\u00e0o ki\u1ec3u con).<\/p>\n<p><b>Tham s\u1ed1 lo\u1ea1i gi\u1edbi h\u1ea1n d\u01b0\u1edbi c\u1ee7a l\u1edbp<\/b><\/p>\n<p>C\u00e1c tham s\u1ed1 ki\u1ec3u c\u00f3 th\u1ec3 c\u00f3 nhi\u1ec1u gi\u1edbi h\u1ea1n, nh\u01b0 trong <tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {...}<\/tt> . Nh\u01b0ng m\u1ed9t tham s\u1ed1 ki\u1ec3u kh\u00f4ng th\u1ec3 c\u00f3 gi\u1edbi h\u1ea1n d\u01b0\u1edbi, ngh\u0129a l\u00e0 m\u1ed9t c\u1ea5u tr\u00fac nh\u01b0 <tt> l\u1edbp Box&lt;T <b> Tuy\u1ec7t<\/b> S\u1ed1&gt; {...}<\/tt> kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p.\u00a0 T\u1ea1i sao kh\u00f4ng?\u00a0 C\u00e2u tr\u1ea3 l\u1eddi l\u00e0: \u0111i\u1ec1u \u0111\u00f3 l\u00e0 v\u00f4 ngh\u0129a v\u00ec n\u00f3 s\u1ebd kh\u00f4ng mua \u0111\u01b0\u1ee3c g\u00ec cho b\u1ea1n n\u1ebfu n\u00f3 \u0111\u01b0\u1ee3c ph\u00e9p.\u00a0 Ch\u00fang ta h\u00e3y xem t\u1ea1i sao c\u00e1c tham s\u1ed1 lo\u1ea1i gi\u1edbi h\u1ea1n d\u01b0\u1edbi c\u1ee7a c\u00e1c l\u1edbp l\u1ea1i g\u00e2y nh\u1ea7m l\u1eabn b\u1eb1ng c\u00e1ch kh\u00e1m ph\u00e1 gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i c\u00f3 ngh\u0129a l\u00e0 g\u00ec.<\/p>\n<p>Gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i c\u00f3 ba t\u00e1c d\u1ee5ng:<\/p>\n<ol>\n<ol>\n<li><b> <i> Kh\u1edfi t\u1ea1o b\u1ecb h\u1ea1n ch\u1ebf.<\/i> <\/b> Gi\u1edbi h\u1ea1n tr\u00ean gi\u1edbi h\u1ea1n t\u1eadp h\u1ee3p c\u00e1c lo\u1ea1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 kh\u1edfi t\u1ea1o lo\u1ea1i chung.\u00a0 N\u1ebfu ch\u00fang ta khai b\u00e1o m\u1ed9t <tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {...} <\/tt> th\u00ec tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd \u0111\u1ea3m b\u1ea3o r\u1eb1ng ch\u1ec9 c\u00e1c ki\u1ec3u con c\u1ee7a <tt> Con s\u1ed1<\/tt> c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m \u0111\u1ed1i s\u1ed1 ki\u1ec3u.\u00a0 \u0110\u00f3 l\u00e0, m\u1ed9t <tt> H\u1ed9p&lt;S\u1ed1&gt;<\/tt> ho\u1eb7c m\u1ed9t <tt> H\u1ed9p&lt;D\u00e0i&gt;<\/tt> \u0111\u01b0\u1ee3c cho ph\u00e9p, nh\u01b0ng m\u1ed9t <tt> H\u1ed9p&lt;Object&gt;<\/tt> ho\u1eb7c <tt> H\u1ed9p&lt;Chu\u1ed7i&gt;<\/tt> s\u1ebd b\u1ecb t\u1eeb ch\u1ed1i<\/li>\n<\/ol>\n<\/ol>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c kh\u1edfi t\u1ea1o b\u1ecb h\u1ea1n ch\u1ebf do gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i):<br \/>\n<tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 gi\u00e1 tr\u1ecb T ri\u00eang t\u01b0;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 H\u1ed9p c\u00f4ng khai(T t) { value = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><tt> Ki\u1ec3m tra l\u1edbp {\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 = Box&lt;Long&gt;(0L) m\u1edbi;\u00a0\u00a0 <b> \/\/ kh\u1ecfe<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Box&lt;String&gt;\u00a0 boxOfString = Box&lt;String&gt; m\u1edbi(\"\"); <b> <span style=\"color:#330000;\"> \/\/ l\u1ed7i: Chu\u1ed7i kh\u00f4ng n\u1eb1m trong gi\u1edbi h\u1ea1n<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>\n<li><b> <i> Truy c\u1eadp v\u00e0o c\u00e1c th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh. <\/i> <\/b> Gi\u1edbi h\u1ea1n tr\u00ean cho ph\u00e9p truy c\u1eadp v\u00e0o t\u1ea5t c\u1ea3 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c v\u00e0 tr\u01b0\u1eddng kh\u00f4ng t\u0129nh c\u00f4ng khai c\u1ee7a gi\u1edbi h\u1ea1n tr\u00ean.\u00a0 Trong vi\u1ec7c th\u1ef1c hi\u1ec7n c\u1ee7a ch\u00fang t\u00f4i <tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {...}<\/tt> ch\u00fang ta c\u00f3 th\u1ec3 g\u1ecdi t\u1ea5t c\u1ea3 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c kh\u00f4ng t\u0129nh c\u00f4ng khai \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong l\u1edbp <tt> Con s\u1ed1<\/tt> , ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> intValue()<\/tt> ch\u1eb3ng h\u1ea1n.\u00a0 N\u1ebfu kh\u00f4ng c\u00f3 gi\u1edbi h\u1ea1n tr\u00ean, tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd t\u1eeb ch\u1ed1i b\u1ea5t k\u1ef3 l\u1ec7nh g\u1ecdi n\u00e0o nh\u01b0 v\u1eady. V\u00ed d\u1ee5 (v\u1ec1 quy\u1ec1n truy c\u1eadp v\u00e0o c\u00e1c th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh do gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i):<\/li>\n<\/ol>\n<p><tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 gi\u00e1 tr\u1ecb T ri\u00eang t\u01b0;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 H\u1ed9p c\u00f4ng khai(T t) { value = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 c\u00f4ng khai int t\u0103ng() { return value.intValue()+1; } <b> \/\/ &lt;= s\u1ebd l\u00e0 m\u1ed9t l\u1ed7i n\u1ebfu kh\u00f4ng c\u00f3 gi\u1edbi h\u1ea1n S\u1ed1<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>\n<li><b> <i> Lo\u1ea1i X\u00f3a. <\/i> <\/b> Gi\u1edbi h\u1ea1n tr\u00ean c\u00f9ng b\u00ean tr\u00e1i \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 x\u00f3a ki\u1ec3u v\u00e0 thay th\u1ebf tham s\u1ed1 ki\u1ec3u trong m\u00e3 byte.\u00a0 Trong c\u1ee7a ch\u00fang t\u00f4i <tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {...}<\/tt> t\u1ea5t c\u1ea3 c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a <tt> T<\/tt> s\u1ebd \u0111\u01b0\u1ee3c thay th\u1ebf b\u1eb1ng gi\u1edbi h\u1ea1n tr\u00ean <tt> Con s\u1ed1<\/tt> .\u00a0 V\u00ed d\u1ee5, n\u1ebfu l\u1edbp <tt> H\u1ed9p<\/tt> c\u00f3 m\u1ed9t tr\u01b0\u1eddng ri\u00eang thu\u1ed9c lo\u1ea1i <tt> T<\/tt> v\u00e0 m\u1ed9t ph\u01b0\u01a1ng ph\u00e1p <tt> t\u1eadp void(n\u1ed9i dung T) <\/tt> \u0111\u1ec3 thi\u1ebft l\u1eadp tr\u01b0\u1eddng ri\u00eang t\u01b0 n\u00e0y th\u00ec tr\u01b0\u1eddng \u0111\u00f3 s\u1ebd thu\u1ed9c lo\u1ea1i <tt> Con s\u1ed1<\/tt> sau khi x\u00f3a ki\u1ec3u v\u00e0 ph\u01b0\u01a1ng th\u1ee9c s\u1ebd \u0111\u01b0\u1ee3c d\u1ecbch sang m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c <tt> b\u1ed9 tr\u1ed1ng (N\u1ed9i dung s\u1ed1)<\/tt> .<\/li>\n<\/ol>\n<\/ol>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i trong vi\u1ec7c x\u00f3a ki\u1ec3u &#8211; <i> tr\u01b0\u1edbc<\/i> g\u00f5 x\u00f3a):<br \/>\n<tt> l\u1edbp Box&lt;<b> T m\u1edf r\u1ed9ng S\u1ed1<\/b> &gt; {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang t\u01b0 <b> T<\/b> gi\u00e1 tr\u1ecb;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 h\u1ed9p c\u00f4ng c\u1ed9ng(<b> T<\/b> t) { gi\u00e1 tr\u1ecb = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }\u00a0<\/tt><\/p>\n<ol>\n<ol>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i trong vi\u1ec7c x\u00f3a ki\u1ec3u &#8211;<\/ol>\n<\/ol>\n<p><i> sau \u0111\u00f3<\/i><\/p>\n<ol>\n<ol>g\u00f5 x\u00f3a):<\/ol>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><tt> H\u1ed9p l\u1edbp {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang t\u01b0 <b> Con s\u1ed1<\/b> gi\u00e1 tr\u1ecb;\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 h\u1ed9p c\u00f4ng c\u1ed9ng(<b> Con s\u1ed1<\/b> t) { gi\u00e1 tr\u1ecb = t; }\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p>\n<ol>Ngo\u00e0i ra, gi\u1edbi h\u1ea1n tr\u00ean ngo\u00e0i c\u00f9ng b\u00ean tr\u00e1i xu\u1ea5t hi\u1ec7n \u1edf c\u00e1c v\u1ecb tr\u00ed kh\u00e1c, ch\u1eb3ng h\u1ea1n nh\u01b0 c\u00e1c ph\u01b0\u01a1ng ph\u00e1p \u0111\u00fac v\u00e0 c\u1ea7u n\u1ed1i \u0111\u01b0\u1ee3c ch\u00e8n t\u1ef1 \u0111\u1ed9ng.<\/ol>\n<p>N\u1ebfu gi\u1edbi h\u1ea1n d\u01b0\u1edbi \u0111\u01b0\u1ee3c cho ph\u00e9p \u0111\u1ed1i v\u1edbi c\u00e1c tham s\u1ed1 lo\u1ea1i, th\u00ec ch\u00fang s\u1ebd ho\u1eb7c n\u00ean c\u00f3 nh\u1eefng t\u00e1c d\u1ee5ng ph\u1ee5 n\u00e0o? N\u1ebfu m\u1ed9t c\u1ea5u tr\u00fac nh\u01b0 <tt> l\u1edbp Box&lt;T <b> Tuy\u1ec7t<\/b> S\u1ed1&gt; {...} <\/tt> \u0111\u01b0\u1ee3c cho ph\u00e9p, \u0111i\u1ec1u \u0111\u00f3 c\u00f3 ngh\u0129a l\u00e0 g\u00ec?\u00a0 3 t\u00e1c d\u1ee5ng ph\u1ee5 c\u1ee7a tham s\u1ed1 lo\u1ea1i tr\u00ean b\u1ecb r\u00e0ng bu\u1ed9c &#8211; kh\u1edfi t\u1ea1o b\u1ecb h\u1ea1n ch\u1ebf, quy\u1ec1n truy c\u1eadp v\u00e0o th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh, x\u00f3a ki\u1ec3u &#8211; c\u00f3 \u00fd ngh\u0129a g\u00ec \u0111\u1ed1i v\u1edbi gi\u1edbi h\u1ea1n d\u01b0\u1edbi?<\/p>\n<p><i> Hi\u1ec7n th\u1ef1c b\u1ecb h\u1ea1n ch\u1ebf. <\/i> Tr\u00ecnh bi\u00ean d\u1ecbch c\u00f3 th\u1ec3 h\u1ea1n ch\u1ebf t\u1eadp h\u1ee3p c\u00e1c lo\u1ea1i c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u0111\u1ec3 kh\u1edfi t\u1ea1o lo\u1ea1i chung v\u1edbi tham s\u1ed1 lo\u1ea1i gi\u1edbi h\u1ea1n d\u01b0\u1edbi.\u00a0 V\u00ed d\u1ee5, tr\u00ecnh bi\u00ean d\u1ecbch c\u00f3 th\u1ec3 cho ph\u00e9p kh\u1edfi t\u1ea1o nh\u01b0 <tt> H\u1ed9p&lt;S\u1ed1&gt;<\/tt> V\u00e0 <tt> H\u1ed9p&lt;Object&gt;<\/tt> t\u1eeb m\u1ed9t <tt> H\u1ed9p&lt;T <b> Tuy\u1ec7t<\/b> S\u1ed1&gt; <\/tt> v\u00e0 t\u1eeb ch\u1ed1i ngay l\u1eadp t\u1ee9c nh\u01b0 <tt> H\u1ed9p&lt;D\u00e0i&gt;<\/tt> ho\u1eb7c <tt> H\u1ed9p&lt;Ng\u1eafn&gt;<\/tt> .\u00a0 \u0110\u00e2y s\u1ebd l\u00e0 m\u1ed9t hi\u1ec7u \u1ee9ng ph\u00f9 h\u1ee3p v\u1edbi t\u00e1c d\u1ee5ng ph\u1ee5 h\u1ea1n ch\u1ebf \u0111\u01b0\u1ee3c m\u00f4 t\u1ea3 cho c\u00e1c gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i tr\u00ean.<\/p>\n<p><i> Truy c\u1eadp v\u00e0o c\u00e1c th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh. <\/i> Gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i th\u1ea5p h\u01a1n kh\u00f4ng c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o b\u1ea5t k\u1ef3 ph\u01b0\u01a1ng th\u1ee9c c\u1ee5 th\u1ec3 n\u00e0o ngo\u00e0i c\u00e1c ph\u01b0\u01a1ng th\u1ee9c \u0111\u01b0\u1ee3c k\u1ebf th\u1eeba t\u1eeb l\u1edbp <tt> S\u1ef1 v\u1eadt<\/tt> . Trong v\u00ed d\u1ee5 v\u1ec1 <tt> H\u1ed9p&lt;T <b> Tuy\u1ec7t<\/b> S\u1ed1&gt; <\/tt> si\u00eau ki\u1ec3u c\u1ee7a <tt> Con s\u1ed1<\/tt> kh\u00f4ng c\u00f3 g\u00ec chung, ngo\u1ea1i tr\u1eeb vi\u1ec7c ch\u00fang l\u00e0 ki\u1ec3u tham chi\u1ebfu v\u00e0 do \u0111\u00f3 l\u00e0 ki\u1ec3u con c\u1ee7a <tt> S\u1ef1 v\u1eadt<\/tt> .\u00a0 Tr\u00ecnh bi\u00ean d\u1ecbch kh\u00f4ng th\u1ec3 gi\u1ea3 \u0111\u1ecbnh r\u1eb1ng tr\u01b0\u1eddng ki\u1ec3u <tt> T<\/tt> thu\u1ed9c lo\u1ea1i <tt> Con s\u1ed1<\/tt> ho\u1eb7c m\u1ed9t ki\u1ec3u con c\u1ee7a n\u00f3.\u00a0 Thay v\u00e0o \u0111\u00f3, tr\u01b0\u1eddng lo\u1ea1i <tt> T<\/tt> c\u00f3 th\u1ec3 thu\u1ed9c b\u1ea5t k\u1ef3 si\u00eau ki\u1ec3u n\u00e0o c\u1ee7a <tt> Con s\u1ed1<\/tt> , ch\u1eb3ng h\u1ea1n nh\u01b0 <tt> C\u00f3 th\u1ec3 tu\u1ea7n t\u1ef1 h\u00f3a<\/tt> ho\u1eb7c <tt> S\u1ef1 v\u1eadt<\/tt> .\u00a0 Vi\u1ec7c g\u1ecdi m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c nh\u01b0 <tt> intValue()<\/tt> kh\u00f4ng c\u00f2n an to\u00e0n v\u1ec1 ki\u1ec3u v\u00e0 tr\u00ecnh bi\u00ean d\u1ecbch s\u1ebd ph\u1ea3i t\u1eeb ch\u1ed1i n\u00f3. K\u1ebft qu\u1ea3 l\u00e0, gi\u1edbi h\u1ea1n tham s\u1ed1 lo\u1ea1i th\u1ea5p h\u01a1n s\u1ebd kh\u00f4ng c\u1ea5p quy\u1ec1n truy c\u1eadp v\u00e0o c\u00e1c th\u00e0nh vi\u00ean kh\u00f4ng t\u0129nh ngo\u00e0i c\u00e1c th\u00e0nh vi\u00ean \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong l\u1edbp <tt> S\u1ef1 v\u1eadt<\/tt> v\u00e0 do \u0111\u00f3 c\u00f3 t\u00e1c d\u1ee5ng t\u01b0\u01a1ng t\u1ef1 nh\u01b0 &#8220;kh\u00f4ng b\u1ecb r\u00e0ng bu\u1ed9c&#8221;.<\/p>\n<p><i> Lo\u1ea1i X\u00f3a<\/i> .\u00a0 Theo d\u00f2ng logic n\u00e0y, s\u1ebd kh\u00f4ng c\u00f3 \u00fd ngh\u0129a g\u00ec khi thay th\u1ebf c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a tham s\u1ed1 lo\u1ea1i b\u1eb1ng gi\u1edbi h\u1ea1n d\u01b0\u1edbi ngo\u00e0i c\u00f9ng b\u00ean tr\u00e1i c\u1ee7a n\u00f3.\u00a0 Khai b\u00e1o m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c gi\u1ed1ng nh\u01b0 h\u00e0m t\u1ea1o <tt> H\u1ed9p(<b> T<\/b> t) <\/tt> v\u1edbi t\u01b0 c\u00e1ch l\u00e0 ng\u01b0\u1eddi x\u00e2y d\u1ef1ng <tt> H\u1ed9p(<b> Con s\u1ed1<\/b> t)<\/tt> kh\u00f4ng c\u00f3 \u00fd ngh\u0129a, xem x\u00e9t r\u1eb1ng <tt> T<\/tt> \u0111\u01b0\u1ee3c thay th\u1ebf b\u1eb1ng si\u00eau ki\u1ec3u c\u1ee7a <tt> Con s\u1ed1<\/tt> .\u00a0 M\u1ed8T <tt> S\u1ef1 v\u1eadt<\/tt> c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u00fang cho h\u00e0m t\u1ea1o ngay l\u1eadp t\u1ee9c <tt> H\u1ed9p&lt;Object&gt;<\/tt> v\u00e0 h\u00e0m t\u1ea1o s\u1ebd t\u1eeb ch\u1ed1i n\u00f3.\u00a0 \u0110i\u1ec1u n\u00e0y s\u1ebd l\u00e0 sai l\u1ea7m ch\u1ebft ng\u01b0\u1eddi.\u00a0\u00a0 V\u00ec v\u1eady, vi\u1ec7c x\u00f3a ki\u1ec3u s\u1ebd thay th\u1ebf t\u1ea5t c\u1ea3 c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a bi\u1ebfn ki\u1ec3u<tt> T<\/tt> theo lo\u1ea1i <tt> S\u1ef1 v\u1eadt<\/tt> , v\u00e0 kh\u00f4ng ph\u1ea3i b\u1edfi gi\u1edbi h\u1ea1n d\u01b0\u1edbi c\u1ee7a n\u00f3.\u00a0 M\u1ed9t l\u1ea7n n\u1eefa, gi\u1edbi h\u1ea1n d\u01b0\u1edbi s\u1ebd c\u00f3 t\u00e1c d\u1ee5ng t\u01b0\u01a1ng t\u1ef1 nh\u01b0 &#8220;kh\u00f4ng gi\u1edbi h\u1ea1n&#8221;.<\/p>\n<p>B\u1ea1n c\u00f3 mu\u1ed1n t\u00ecm hi\u1ec3u xem \u0111i\u1ec1u \u0111\u00f3 c\u00f3 ngh\u0129a l\u00e0 g\u00ec n\u1ebfu c\u1ea3 hai \u0111\u1ec1u th\u1ea5p h\u01a1n <i> _V\u00e0_<\/i> gi\u1edbi h\u1ea1n tr\u00ean c\u00f3 \u0111\u01b0\u1ee3c ph\u00e9p kh\u00f4ng?\u00a0\u00a0 C\u00e1 nh\u00e2n t\u00f4i th\u1eadm ch\u00ed kh\u00f4ng mu\u1ed1n ngh\u0129 v\u1ec1 n\u00f3 v\u00e0 mu\u1ed1n x\u1ebfp n\u00f3 v\u00e0o m\u1ee5c &#8220;kh\u00f4ng th\u1ec3 qu\u1ea3n l\u00fd \u0111\u01b0\u1ee3c&#8221; n\u1ebfu b\u1ea1n cho ph\u00e9p.<\/p>\n<p>\u0110i\u1ec3m m\u1ea5u ch\u1ed1t l\u00e0: t\u1ea5t c\u1ea3 nh\u1eefng \u0111i\u1ec1u \u0111\u00f3 l\u00e0 &#8220;<tt> Tuy\u1ec7t<\/tt> &#8221; r\u00e0ng bu\u1ed9c s\u1ebd mua b\u1ea1n l\u00e0 h\u1ea1n ch\u1ebf m\u00e0 ch\u1ec9 c\u00f3 si\u00eau ki\u1ec3u c\u1ee7a <tt> Con s\u1ed1<\/tt> c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m \u0111\u1ed1i s\u1ed1 ki\u1ec3u.\u00a0 V\u00e0 th\u1eadm ch\u00ed \u0111i\u1ec1u \u0111\u00f3 th\u01b0\u1eddng xuy\u00ean b\u1ecb hi\u1ec3u l\u1ea7m.\u00a0 N\u00f3 KH\u00d4NG c\u00f3 ngh\u0129a l\u00e0 <tt> l\u1edbp Box&lt;T si\u00eau S\u1ed1&gt; {...}<\/tt> ch\u1ec9 ch\u1ee9a c\u00e1c tr\u01b0\u1eddng h\u1ee3p si\u00eau ki\u1ec3u c\u1ee7a <tt> Con s\u1ed1<\/tt> .\u00a0 Ho\u00e0n to\u00e0n ng\u01b0\u1ee3c l\u1ea1i &#8211; nh\u01b0 v\u00ed d\u1ee5 d\u01b0\u1edbi \u0111\u00e2y ch\u1ee9ng minh!<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i trong vi\u1ec7c x\u00f3a ki\u1ec3u &#8211; <i> tr\u01b0\u1edbc<\/i> g\u00f5 x\u00f3a):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> l\u1edbp Box&lt;<b> T si\u00eau s\u1ed1<\/b> &gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang t\u01b0 <b> T<\/b> gi\u00e1 tr\u1ecb;<\/tt><br \/>\n<tt> \u00a0\u00a0 h\u1ed9p c\u00f4ng c\u1ed9ng(<b> T<\/b> t) { gi\u00e1 tr\u1ecb = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a tham s\u1ed1 lo\u1ea1i trong vi\u1ec7c x\u00f3a ki\u1ec3u &#8211; <i> sau \u0111\u00f3<\/i> g\u00f5 x\u00f3a):<\/p>\n<div style=\"margin-left:40px;\">\n<blockquote><p><tt> H\u1ed9p l\u1edbp {<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang t\u01b0 <b> S\u1ef1 v\u1eadt<\/b> gi\u00e1 tr\u1ecb;<\/tt><br \/>\n<tt> \u00a0\u00a0 h\u1ed9p c\u00f4ng c\u1ed9ng(<b> S\u1ef1 v\u1eadt<\/b> t) { gi\u00e1 tr\u1ecb = t; }<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<\/div>\n<p>M\u1ed8T <tt> l\u1edbp Box&lt;T <b> Tuy\u1ec7t<\/b> S\u1ed1&gt; {...} <\/tt> s\u1ebd \u0111\u01b0\u1ee3c d\u1ecbch b\u1eb1ng c\u00e1ch x\u00f3a th\u00e0nh m\u1ed9t <tt> H\u1ed9p<\/tt> ch\u1ee9a m\u1ed9t <tt> S\u1ef1 v\u1eadt<\/tt> tr\u01b0\u1eddng v\u00e0 h\u00e0m t\u1ea1o c\u1ee7a n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c d\u1ecbch sang <tt> H\u1ed9p(\u0110\u1ed1i t\u01b0\u1ee3ng t)<\/tt> . \u0110i\u1ec1u \u0111\u00f3 v\u1ec1 c\u01a1 b\u1ea3n kh\u00e1c v\u1edbi m\u1ed9t <tt> l\u1edbp Box&lt;T <b> m\u1edf r\u1ed9ng<\/b> S\u1ed1&gt; {...}<\/tt> , s\u1ebd \u0111\u01b0\u1ee3c d\u1ecbch sang m\u1ed9t <tt> H\u1ed9p<\/tt> ch\u1ee9a m\u1ed9t <tt> Con s\u1ed1<\/tt> tr\u01b0\u1eddng v\u00e0 h\u00e0m t\u1ea1o c\u1ee7a n\u00f3 s\u1ebd \u0111\u01b0\u1ee3c d\u1ecbch sang <tt> H\u1ed9p (S\u1ed1 t)<\/tt> . Do \u0111\u00f3, m\u1ed9t <tt> H\u1ed9p&lt;S\u1ed1&gt;<\/tt> \u0111\u01b0\u1ee3c kh\u1edfi t\u1ea1o t\u1eeb m\u1ed9t<tt> l\u1edbp Box&lt;T m\u1edf r\u1ed9ng Number&gt; {...}<\/tt> s\u1ebd kh\u00e1c v\u1edbi m\u1ed9t <tt> H\u1ed9p&lt;S\u1ed1&gt;<\/tt> kh\u1edfi t\u1ea1o t\u1eeb m\u1ed9t <tt> l\u1edbp Box&lt;T si\u00eau S\u1ed1&gt; {...}<\/tt> , \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 g\u00e2y nh\u1ea7m l\u1eabn.\u00a0 V\u00ec l\u00fd do n\u00e0y, gi\u1edbi h\u1ea1n d\u01b0\u1edbi kh\u00f4ng c\u00f3 \u00fd ngh\u0129a \u0111\u1ed1i v\u1edbi c\u00e1c tham s\u1ed1 ki\u1ec3u c\u1ee7a c\u00e1c l\u1edbp.<\/p>\n<p>&nbsp;<\/p>\n<hr width=\"100%\" \/>\n<p>&nbsp;<\/p>\n<p><b>Th\u00f4ng s\u1ed1 lo\u1ea1i gi\u1edbi h\u1ea1n d\u01b0\u1edbi c\u1ee7a ph\u01b0\u01a1ng ph\u00e1p<\/b><\/p>\n<p>C\u00f9ng v\u1edbi c\u00e1c ph\u01b0\u01a1ng th\u1ee9c v\u00e0 ki\u1ec3u \u0111\u1ed1i s\u1ed1 c\u1ee7a ch\u00fang, m\u1ed9t tham s\u1ed1 ki\u1ec3u c\u00f3 gi\u1edbi h\u1ea1n d\u01b0\u1edbi \u0111\u00f4i khi c\u00f3 th\u1ec3 h\u1eefu \u00edch.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 m\u1ed9t ph\u01b0\u01a1ng th\u1ee9c s\u1ebd \u0111\u01b0\u1ee3c h\u01b0\u1edfng l\u1ee3i t\u1eeb tham s\u1ed1 lo\u1ea1i c\u00f3 gi\u1edbi h\u1ea1n d\u01b0\u1edbi):<\/p>\n<blockquote><p><tt> l\u1edbp Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang X tr\u01b0\u1edbc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang Y gi\u00e2y;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 &lt; c\u00f4ng khai<b> M\u1ed9t si\u00eau X<\/b> ,<b> B si\u00eau Y<\/b> &gt; B addToMap(Map&lt;A,B&gt; map) { \/\/ l\u1ed7i: tham s\u1ed1 lo\u1ea1i kh\u00f4ng th\u1ec3 c\u00f3 gi\u1edbi h\u1ea1n d\u01b0\u1edbi<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return map.put(th\u1ee9 nh\u1ea5t, th\u1ee9 hai);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> Ki\u1ec3m tra l\u1edbp {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 C\u1eb7p Pair&lt;String, C\u1eb7p Long&gt; = C\u1eb7p &lt;&gt; m\u1edbi (\"ABC\", 42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 B\u1ea3n \u0111\u1ed3 Map&lt;CharSequence, Number&gt; = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 S\u1ed1 s\u1ed1 = pair.addToMap(map);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>c\u00e1c <tt> addToMap()<\/tt> ph\u01b0\u01a1ng th\u1ee9c th\u00eam n\u1ed9i dung c\u1ee7a c\u1eb7p v\u00e0o b\u1ea3n \u0111\u1ed3.\u00a0 B\u1ea5t k\u1ef3 b\u1ea3n \u0111\u1ed3 n\u00e0o c\u00f3 th\u1ec3 ch\u1ee9a si\u00eau ki\u1ec3u c\u1ee7a <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> s\u1ebd l\u00e0m \u0111\u01b0\u1ee3c.\u00a0 B\u1ea3n \u0111\u1ed3 c\u1ee7a <tt> \u0111\u1eb7t()<\/tt> ph\u01b0\u01a1ng th\u1ee9c tr\u1ea3 v\u1ec1 gi\u00e1 tr\u1ecb \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y trong b\u1ea3n \u0111\u1ed3 cho kh\u00f3a \u0111\u00e3 cho, n\u1ebfu \u0111\u00e3 c\u00f3 m\u1ee5c nh\u1eadp kh\u00f3a-gi\u00e1 tr\u1ecb cho kh\u00f3a trong b\u1ea3n \u0111\u1ed3.\u00a0 Gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1 c\u1ee7a b\u1ea3n \u0111\u1ed3 <tt> \u0111\u1eb7t()<\/tt> ph\u01b0\u01a1ng th\u1ee9c s\u1ebd \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1 t\u1eeb <tt> addToMap()<\/tt> ph\u01b0\u01a1ng ph\u00e1p.\u00a0 Trong nh\u1eefng tr\u01b0\u1eddng h\u1ee3p n\u00e0y, ng\u01b0\u1eddi ta mu\u1ed1n khai b\u00e1o ph\u01b0\u01a1ng th\u1ee9c nh\u01b0 \u0111\u01b0\u1ee3c hi\u1ec3n th\u1ecb \u1edf tr\u00ean: B\u1ea3n \u0111\u1ed3 \u0111\u01b0\u1ee3c tham s\u1ed1 h\u00f3a v\u1edbi c\u00e1c si\u00eau ki\u1ec3u c\u1ee7a tham s\u1ed1 lo\u1ea1i c\u1ee7a c\u1eb7p v\u00e0 <tt> addToMap()<\/tt> Ki\u1ec3u tr\u1ea3 v\u1ec1 c\u1ee7a ph\u01b0\u01a1ng th\u1ee9c l\u00e0 ki\u1ec3u gi\u00e1 tr\u1ecb c\u1ee7a b\u1ea3n \u0111\u1ed3.<\/p>\n<p>V\u00ec tr\u00ecnh bi\u00ean d\u1ecbch kh\u00f4ng cho ph\u00e9p gi\u1edbi h\u1ea1n d\u01b0\u1edbi \u0111\u1ed1i v\u1edbi c\u00e1c tham s\u1ed1 lo\u1ea1i n\u00ean ch\u00fang t\u00f4i c\u1ea7n gi\u1ea3i quy\u1ebft.<\/p>\n<p>M\u1ed9t c\u00e1ch gi\u1ea3i quy\u1ebft m\u00e0 t\u00f4i ngh\u0129 \u0111\u1ebfn l\u00e0 s\u1eed d\u1ee5ng k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n, v\u00ec k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n c\u00f3 th\u1ec3 c\u00f3 gi\u1edbi h\u1ea1n d\u01b0\u1edbi.\u00a0 \u0110\u00e2y l\u00e0 c\u00e1ch gi\u1ea3i quy\u1ebft b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n.<\/p>\n<p>V\u00ed d\u1ee5 (c\u00e1ch gi\u1ea3i quy\u1ebft cho v\u00ed d\u1ee5 tr\u01b0\u1edbc b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n):<\/p>\n<blockquote><p><tt> l\u1edbp Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang X tr\u01b0\u1edbc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang Y gi\u00e2y;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 c\u00f4ng c\u1ed9ng <b> S\u1ef1 v\u1eadt<\/b> addToMap(Map&lt;<b> ? si\u00eau X<\/b> , <b> ? si\u00eau Y<\/b> B\u1ea3n \u0111\u1ed3 &gt;) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 return map.put(th\u1ee9 nh\u1ea5t, th\u1ee9 hai);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><br \/>\n<tt> Ki\u1ec3m tra l\u1edbp {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 C\u1eb7p Pair&lt;String, C\u1eb7p Long&gt; = C\u1eb7p &lt;&gt; m\u1edbi (\"ABC\", 42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 B\u1ea3n \u0111\u1ed3 Map&lt;CharSequence, Number&gt; = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 S\u1ed1 s\u1ed1 = <b> (Con s\u1ed1)<\/b> pair.addToMap(map);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>N\u00f3 ho\u1ea1t \u0111\u1ed9ng, ngo\u1ea1i tr\u1eeb vi\u1ec7c kh\u00f4ng c\u00f3 c\u00e1ch n\u00e0o \u0111\u1ec3 khai b\u00e1o ki\u1ec3u tr\u1ea3 v\u1ec1 nh\u01b0 mong mu\u1ed1n.\u00a0 N\u00f3 s\u1ebd l\u00e0 si\u00eau ki\u1ec3u c\u1ee7a <tt> Y<\/tt> m\u00e0 tr\u00ecnh bi\u00ean d\u1ecbch thu th\u1eadp t\u1eeb lo\u1ea1i b\u1ea3n \u0111\u1ed3, nh\u01b0ng kh\u00f4ng c\u00f3 c\u00fa ph\u00e1p \u0111\u1ec3 ch\u1ec9 \u0111\u1ecbnh n\u00f3.\u00a0 Ch\u00fang ta kh\u00f4ng \u0111\u01b0\u1ee3c khai b\u00e1o ki\u1ec3u tr\u1ea3 v\u1ec1 l\u00e0 &#8220;<tt> ? si\u00eau Y<\/tt> &#8220;, b\u1edfi v\u00ec &#8220;<tt> ? si\u00eau Y<\/tt> &#8221; l\u00e0 k\u00fd t\u1ef1 \u0111\u1ea1i di\u1ec7n ch\u1ee9 kh\u00f4ng ph\u1ea3i m\u1ed9t lo\u1ea1i v\u00e0 do \u0111\u00f3 kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e9p l\u00e0m lo\u1ea1i tr\u1ea3 v\u1ec1. Ch\u00fang t\u00f4i kh\u00f4ng c\u00f3 l\u1ef1a ch\u1ecdn n\u00e0o kh\u00e1c v\u00e0 ph\u1ea3i s\u1eed d\u1ee5ng <tt> S\u1ef1 v\u1eadt<\/tt> thay v\u00e0o \u0111\u00f3 l\u00e0 ki\u1ec3u tr\u1ea3 v\u1ec1 c\u1ee7a ph\u01b0\u01a1ng th\u1ee9c c\u1ee7a ch\u00fang t\u00f4i.\u00a0 Ki\u1ec3u tr\u1ea3 v\u1ec1 kh\u00e1 kh\u00f4ng c\u1ee5 th\u1ec3 n\u00e0y l\u1ea7n l\u01b0\u1ee3t bu\u1ed9c ng\u01b0\u1eddi g\u1ecdi <tt> addToMap()<\/tt> ph\u01b0\u01a1ng ph\u00e1p truy\u1ec1n gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1 t\u1eeb <tt> S\u1ef1 v\u1eadt<\/tt> v\u1edbi lo\u1ea1i th\u1ef1c t\u1ebf c\u1ee7a n\u00f3.\u00a0 \u0110\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 ch\u00ednh x\u00e1c nh\u1eefng g\u00ec ch\u00fang t\u00f4i \u0111\u00e3 ngh\u0129 \u0111\u1ebfn.<\/p>\n<p>M\u1ed9t c\u00e1ch gi\u1ea3i quy\u1ebft kh\u00e1c l\u00e0 s\u1eed d\u1ee5ng c\u00e1c ph\u01b0\u01a1ng th\u1ee9c t\u0129nh.\u00a0 \u0110\u00e2y l\u00e0 c\u00e1ch gi\u1ea3i quy\u1ebft b\u1eb1ng ph\u01b0\u01a1ng th\u1ee9c t\u0129nh thay v\u00ec ph\u01b0\u01a1ng th\u1ee9c kh\u00f4ng t\u0129nh.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 c\u00e1ch gi\u1ea3i quy\u1ebft cho v\u00ed d\u1ee5 tr\u01b0\u1edbc b\u1eb1ng ph\u01b0\u01a1ng ph\u00e1p t\u0129nh):<\/p>\n<blockquote><p><tt> l\u1edbp Pair&lt;X,Y&gt; {<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang X tr\u01b0\u1edbc;<\/tt><br \/>\n<tt> \u00a0\u00a0 ri\u00eang Y gi\u00e2y;<\/tt><br \/>\n<tt> \u00a0\u00a0 ...<\/tt><br \/>\n<tt> \u00a0\u00a0 c\u00f4ng c\u1ed9ng <b> t\u0129nh<\/b> &lt;<b> M\u1ed8T<\/b> ,<b> B<\/b> ,X <b> m\u1edf r\u1ed9ng A<\/b> , Y <b> m\u1edf r\u1ed9ng B<\/b> &gt; B addToMap(Pair&lt;X,c\u1eb7p Y&gt;, Map&lt;<b> M\u1ed8T<\/b> ,<b> B<\/b> B\u1ea3n \u0111\u1ed3 &gt;) {<\/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> Ki\u1ec3m tra l\u1edbp {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0 public static void main(String[] args) {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 C\u1eb7p Pair&lt;String, C\u1eb7p Long&gt; = C\u1eb7p &lt;&gt; m\u1edbi (\"ABC\", 42L);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 B\u1ea3n \u0111\u1ed3 Map&lt;CharSequence, Number&gt; = HashMap&lt;CharSequence, Number&gt;();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0 S\u1ed1 s\u1ed1 = <b> \u0110\u00f4i<\/b> .addToMap(<b> \u0111\u00f4i<\/b> ,b\u1ea3n \u0111\u1ed3);<\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>C\u00e1i chung <tt> addToMap()<\/tt> ph\u01b0\u01a1ng th\u1ee9c c\u00f3 b\u1ed1n tham s\u1ed1 lo\u1ea1i: hai ph\u1ea7n gi\u1eef ch\u1ed7 <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> cho lo\u1ea1i c\u1eb7p v\u00e0 hai ph\u1ea7n gi\u1eef ch\u1ed7 <tt> M\u1ed8T<\/tt> V\u00e0 <tt> B <\/tt> cho lo\u1ea1i b\u1ea3n \u0111\u1ed3. <tt> M\u1ed8T<\/tt> V\u00e0 <tt> B<\/tt> l\u00e0 si\u00eau ki\u1ec3u c\u1ee7a <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> , b\u1edfi v\u00ec <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> \u00a0 \u0111\u01b0\u1ee3c khai b\u00e1o v\u1edbi <tt> M\u1ed8T<\/tt> V\u00e0 <tt> B<\/tt> nh\u01b0 gi\u1edbi h\u1ea1n tr\u00ean c\u1ee7a h\u1ecd. (L\u01b0u \u00fd r\u1eb1ng c\u00e1c tham s\u1ed1 ki\u1ec3u c\u1ee7a ph\u01b0\u01a1ng th\u1ee9c chung <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> kh\u00f4ng c\u00f3 g\u00ec \u0111\u1ec3 l\u00e0m v\u1edbi <tt> \u0110\u00f4i<\/tt> l\u1edbp h\u1ecdc <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> c\u00e1c th\u00f4ng s\u1ed1.\u00a0 Nh\u1eefng c\u00e1i t\u00ean <tt> X<\/tt> V\u00e0 <tt> Y<\/tt> \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u1ea1i cho ph\u01b0\u01a1ng th\u1ee9c chung \u0111\u1ec3 l\u00e0m cho ch\u00fang d\u1ec5 d\u00e0ng \u0111\u01b0\u1ee3c nh\u1eadn bi\u1ebft d\u01b0\u1edbi d\u1ea1ng tham s\u1ed1 lo\u1ea1i c\u1ee7a c\u1eb7p. S\u1eed d\u1ee5ng b\u1ed1n tham s\u1ed1 lo\u1ea1i, ch\u00fang ta c\u00f3 th\u1ec3 khai b\u00e1o ki\u1ec3u tr\u1ea3 v\u1ec1 ch\u00ednh x\u00e1c nh\u01b0 mong mu\u1ed1n: n\u00f3 c\u00f9ng lo\u1ea1i v\u1edbi lo\u1ea1i gi\u00e1 tr\u1ecb c\u1ee7a b\u1ea3n \u0111\u1ed3.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng b\u1ea5t h\u1ee3p ph\u00e1p tham s\u1ed1 lo\u1ea1i trong ng\u1eef c\u1ea3nh t\u0129nh c\u1ee7a m\u1ed9t l\u1edbp chung):<\/p>\n<blockquote><p><tt> l\u1edbp SomeClass<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> b\u1ed9 kh\u1edfi t\u1ea1o t\u0129nh, tr\u01b0\u1eddng t\u0129nh, ph\u01b0\u01a1ng th\u1ee9c t\u0129nh<\/i><br \/>\n<tt> \u00a0 <b> t\u0129nh<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 M\u1ed9t s\u1ed1L\u1edbp&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> Ki\u1ec3m tra &gt; = SomeClass&lt; m\u1edbi<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;(); <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ri\u00eang t\u01b0 <b> t\u0129nh<\/b> <b> <span style=\"color:#000099;\"> T<\/span> <\/b> th\u00f4ng tin to\u00e0n c\u1ea7u;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng\u00a0 <b> t\u0129nh<\/b> <b> <span style=\"color:#000099;\"> T <\/span> <\/b> getGlobalInfo() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 GlobalInfo;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> tr\u00ecnh kh\u1edfi t\u1ea1o kh\u00f4ng t\u0129nh, tr\u01b0\u1eddng kh\u00f4ng t\u0129nh, ph\u01b0\u01a1ng th\u1ee9c kh\u00f4ng t\u0129nh<\/i><br \/>\n<tt> \u00a0 {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 M\u1ed9t s\u1ed1L\u1edbp&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> Ki\u1ec3m tra &gt; = SomeClass&lt; m\u1edbi<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ri\u00eang t\u01b0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> th\u00f4ng tin \u0111\u1ecba ph\u01b0\u01a1ng;<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng\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 tr\u1ea3 v\u1ec1 localInfo;<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> c\u00e1c ki\u1ec3u l\u1ed3ng nhau t\u0129nh<\/i><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng <b> t\u0129nh<\/b> <b> l\u1edbp h\u1ecdc<\/b> Th\u1ea5t b\u1ea1i m\u1edf r\u1ed9ng Ngo\u1ea1i l\u1ec7 {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> <span style=\"color:#000099;\"> T<\/span> <\/b> th\u00f4ng tin;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 Th\u1ea5t b\u1ea1i c\u00f4ng khai(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { th\u00f4ng tin = t; }\u00a0\u00a0\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { tr\u1ea3 v\u1ec1 th\u00f4ng tin; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 ri\u00eang t\u01b0 <b> giao di\u1ec7n<\/b> C\u00f3 th\u1ec3 sao ch\u00e9p {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> sao ch\u00e9p();\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;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 ri\u00eang t\u01b0 <b> li\u1ec7t k\u00ea<\/b> T\u00ecnh tr\u1ea1ng {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 H\u1ee2P L\u1ec6, KH\u00d4NG H\u1ee2P L\u1ec6;<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 ri\u00eang t\u01b0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> th\u00f4ng tin; \/\/ l\u1ed7i<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 public void setInfo(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { th\u00f4ng tin = t; } <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { tr\u1ea3 v\u1ec1 th\u00f4ng tin; }\u00a0\u00a0\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> c\u00e1c ki\u1ec3u l\u1ed3ng nhau kh\u00f4ng t\u0129nh<\/i><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng <b> l\u1edbp h\u1ecdc<\/b> Ng\u01b0\u1eddi truy c\u1eadp {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getInfo() { tr\u1ea3 v\u1ec1 localInfo; }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>V\u00ed d\u1ee5 minh h\u1ecda r\u1eb1ng tham s\u1ed1 ki\u1ec3u kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong ng\u1eef c\u1ea3nh t\u0129nh c\u1ee7a m\u1ed9t l\u1edbp chung.\u00a0 N\u00f3 c\u0169ng cho th\u1ea5y c\u00e1c giao di\u1ec7n l\u1ed3ng nhau v\u00e0 c\u00e1c ki\u1ec3u enum \u0111\u01b0\u1ee3c coi l\u00e0 th\u00e0nh vi\u00ean ki\u1ec3u t\u0129nh c\u1ee7a l\u1edbp.\u00a0 Ch\u1ec9 c\u00e1c l\u1edbp b\u00ean trong, t\u1ee9c l\u00e0 c\u00e1c l\u1edbp l\u1ed3ng nhau kh\u00f4ng t\u0129nh, m\u1edbi c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng tham s\u1ed1 ki\u1ec3u c\u1ee7a l\u1edbp chung k\u00e8m theo.<\/p>\n<p>Ph\u1ea1m vi tham s\u1ed1 lo\u1ea1i c\u1ee7a giao di\u1ec7n l\u00e0 to\u00e0n b\u1ed9 \u0111\u1ecbnh ngh\u0129a c\u1ee7a giao di\u1ec7n, ngo\u1ea1i tr\u1eeb m\u1ecdi tr\u01b0\u1eddng ho\u1eb7c ki\u1ec3u l\u1ed3ng nhau.\u00a0 \u0110i\u1ec1u n\u00e0y l\u00e0 do c\u00e1c tr\u01b0\u1eddng v\u00e0 ki\u1ec3u l\u1ed3ng nhau \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh trong giao di\u1ec7n ho\u00e0n to\u00e0n t\u0129nh.<\/p>\n<p>V\u00ed d\u1ee5 (v\u1ec1 vi\u1ec7c s\u1eed d\u1ee5ng b\u1ea5t h\u1ee3p ph\u00e1p tham s\u1ed1 lo\u1ea1i trong giao di\u1ec7n chung):<\/p>\n<blockquote><p><tt> giao di\u1ec7n SomeInterface<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> c\u00e1nh \u0111\u1ed3ng<\/i><br \/>\n<tt> \u00a0 M\u1ed9t s\u1ed1L\u1edbp&lt;<b> <span style=\"color:#000099;\"> T<\/span> <\/b> Gi\u00e1 tr\u1ecb &gt; = SomeClass&lt; m\u1edbi<b> <span style=\"color:#000099;\"> T<\/span> <\/b> &gt;();\u00a0 <b> <span style=\"color:#660000;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> ki\u1ec3u l\u1ed3ng nhau<\/i><br \/>\n<tt> \u00a0 <b> l\u1edbp h\u1ecdc<\/b> Ng\u01b0\u1eddi truy c\u1eadp {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 c\u00f4ng c\u1ed9ng <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;\"> \/\/ l\u1ed7i<\/span> <\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 gi\u00e1 tr\u1ecb tr\u1ea3 v\u1ec1.getGlobalInfo();<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 \/\/ <\/tt> <i> ph\u01b0\u01a1ng ph\u00e1p<\/i><br \/>\n<tt> \u00a0 <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getValue();<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>V\u00ed d\u1ee5 cho th\u1ea5y c\u00e1c tr\u01b0\u1eddng c\u1ee7a m\u1ed9t giao di\u1ec7n ho\u00e0n to\u00e0n t\u0129nh, do \u0111\u00f3 tham s\u1ed1 lo\u1ea1i kh\u00f4ng th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng \u1edf b\u1ea5t k\u1ef3 \u0111\u00e2u trong ph\u1ea7n khai b\u00e1o tr\u01b0\u1eddng c\u1ee7a giao di\u1ec7n chung.\u00a0 T\u01b0\u01a1ng t\u1ef1, l\u1edbp l\u1ed3ng nhau \u0111\u01b0\u1ee3c coi l\u00e0 l\u1edbp l\u1ed3ng t\u0129nh, kh\u00f4ng ph\u1ea3i l\u1edbp b\u00ean trong v\u00e0 v\u00ec l\u00fd do n\u00e0y, vi\u1ec7c s\u1eed d\u1ee5ng tham s\u1ed1 lo\u1ea1i \u1edf b\u1ea5t k\u1ef3 \u0111\u00e2u trong l\u1edbp l\u1ed3ng nhau l\u00e0 b\u1ea5t h\u1ee3p ph\u00e1p.<\/p>\n<p><b> <i> C\u00e1ch gi\u1ea3i quy\u1ebft cho c\u00e1c l\u1edbp v\u00e0 giao di\u1ec7n t\u0129nh l\u1ed3ng nhau:<\/i> <\/b><\/p>\n<p>Trong tr\u01b0\u1eddng h\u1ee3p c\u00e1c l\u1edbp v\u00e0 giao di\u1ec7n l\u1ed3ng nhau t\u0129nh th\u00ec \u0111\u00e2y kh\u00f4ng ph\u1ea3i l\u00e0 m\u1ed9t tai h\u1ecda l\u1edbn.\u00a0 \u0110\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y, ch\u00fang ta c\u00f3 th\u1ec3 t\u1ef1 t\u1ea1o l\u1edbp ho\u1eb7c giao di\u1ec7n t\u0129nh.<\/p>\n<p>V\u00ed d\u1ee5 (c\u00e1ch gi\u1ea3i quy\u1ebft &#8211; t\u1ea1o ki\u1ec3u t\u0129nh l\u1ed3ng nhau):<\/p>\n<blockquote><p><tt> tr\u00ecnh bao b\u1ecdc l\u1edbp<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> <span style=\"color:#000099;\"> T<\/span> <\/b> \u0111\u1ed1i t\u01b0\u1ee3ng;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 tr\u00ecnh bao b\u1ecdc c\u00f4ng khai(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { tr\u1ea3 v\u1ec1Object; }<\/tt><tt> \u00a0 c\u00f4ng khai b\u1ea5t bi\u1ebfn<b> &lt;T&gt;<\/b> makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 l\u1ea1i m\u1edbi B\u1ea5t bi\u1ebfn<b> &lt;T&gt;<\/b> (\u0110\u1ed1i t\u01b0\u1ee3ng);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng c\u00f3 th\u1ec3 thay \u0111\u1ed5i<b> &lt;T&gt;<\/b> makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 l\u1ea1i m\u1edbi C\u00f3 th\u1ec3 thay \u0111\u1ed5i<b> &lt;T&gt;<\/b> (\u0110\u1ed1i t\u01b0\u1ee3ng);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 t\u0129nh ri\u00eang &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 l\u1edbp cu\u1ed1i c\u00f9ng t\u0129nh c\u00f4ng khai B\u1ea5t bi\u1ebfn<b> &lt;A&gt;<\/b> { <b> \/\/ b\u00e2y gi\u1edd l\u00e0 m\u1ed9t l\u1edbp chung<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> M\u1ed8T<\/b> \u0111\u1ed1i t\u01b0\u1ee3ng;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 c\u00f4ng khai b\u1ea5t bi\u1ebfn(<b> M\u1ed8T<\/b> tranh lu\u1eadn) {<\/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 c\u00f4ng c\u1ed9ng <b> M\u1ed8T<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 l\u1edbp t\u0129nh c\u00f4ng khai C\u00f3 th\u1ec3 thay \u0111\u1ed5i<b> &lt;A&gt;<\/b> {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... t\u01b0\u01a1ng t\u1ef1 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Kh\u00f4ng c\u00f3 c\u00e1ch gi\u1ea3i quy\u1ebft n\u00e0o nh\u01b0 v\u1eady \u0111\u1ed1i v\u1edbi c\u00e1c ki\u1ec3u enum l\u1ed3ng nhau v\u00ec ch\u00fang kh\u00f4ng th\u1ec3 chung chung.<\/p>\n<p><b> <i> C\u00e1ch gi\u1ea3i quy\u1ebft cho c\u00e1c l\u1edbp t\u0129nh l\u1ed3ng nhau:<\/i> <\/b><\/p>\n<p>N\u1ebfu ki\u1ec3u t\u0129nh l\u1ed3ng nhau l\u00e0 m\u1ed9t l\u1edbp, th\u00ec m\u1ed9t c\u00e1ch gi\u1ea3i quy\u1ebft kh\u00e1c l\u00e0 bi\u1ebfn l\u1edbp t\u0129nh th\u00e0nh l\u1edbp b\u00ean trong kh\u00f4ng t\u0129nh.<\/p>\n<p>V\u00ed d\u1ee5 (c\u00e1ch gi\u1ea3i quy\u1ebft &#8211; s\u1eed d\u1ee5ng l\u1edbp b\u00ean trong):<\/p>\n<blockquote><p><tt> tr\u00ecnh bao b\u1ecdc l\u1edbp<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> <span style=\"color:#000099;\"> T<\/span> <\/b> \u0111\u1ed1i t\u01b0\u1ee3ng;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 tr\u00ecnh bao b\u1ecdc c\u00f4ng khai(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { tr\u1ea3 v\u1ec1Object; }<\/tt><tt> \u00a0 c\u00f4ng khai c\u00f3 th\u1ec3 thay \u0111\u1ed5i makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1edf l\u1ea1i <b> c\u00e1i n\u00e0y.<\/b> C\u00f3 th\u1ec3 thay \u0111\u1ed5i m\u1edbi (theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng khai B\u1ea5t bi\u1ebfn makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1edf l\u1ea1i <b> c\u00e1i n\u00e0y.<\/b> B\u1ea5t bi\u1ebfn m\u1edbi (theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 t\u0129nh ri\u00eang &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 l\u1edbp cu\u1ed1i c\u00f9ng c\u00f4ng khai B\u1ea5t bi\u1ebfn {\u00a0 <b> \/\/ kh\u00f4ng c\u00f2n l\u00e0 l\u1edbp t\u0129nh n\u1eefa<\/b> <\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> T<\/b> \u0111\u1ed1i t\u01b0\u1ee3ng;<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 c\u00f4ng khai b\u1ea5t bi\u1ebfn(<b> T<\/b> tranh lu\u1eadn) {<\/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 c\u00f4ng c\u1ed9ng <b> T<\/b> getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 l\u1edbp c\u00f4ng khai C\u00f3 th\u1ec3 thay \u0111\u1ed5i\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... t\u01b0\u01a1ng t\u1ef1 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>C\u00e1ch gi\u1ea3i quy\u1ebft n\u00e0y \u0111i k\u00e8m v\u1edbi m\u1ed9t l\u01b0\u1ee3ng chi ph\u00ed nh\u1ea5t \u0111\u1ecbnh v\u00ec t\u1ea5t c\u1ea3 c\u00e1c l\u1edbp b\u00ean trong \u0111\u1ec1u c\u00f3 m\u1ed9t tham chi\u1ebfu \u1ea9n \u0111\u1ebfn m\u1ed9t th\u1ec3 hi\u1ec7n c\u1ee7a lo\u1ea1i b\u00ean ngo\u00e0i, m\u00e0 trong v\u00ed d\u1ee5 n\u00e0y ch\u00fang kh\u00f4ng c\u1ea7n c\u0169ng nh\u01b0 kh\u00f4ng t\u1eadn d\u1ee5ng \u0111\u01b0\u1ee3c; t\u00e0i li\u1ec7u tham kh\u1ea3o \u1ea9n ch\u1ec9 l\u00e0 h\u00e0nh l\u00fd.\u00a0 Th\u00f4ng th\u01b0\u1eddng, c\u00e1c l\u1edbp b\u00ean trong \u0111\u01b0\u1ee3c k\u1ebft h\u1ee3p v\u1edbi c\u00e1c giao di\u1ec7n \u0111\u1ec3 gi\u1eef cho l\u1edbp b\u00ean trong l\u00e0 m\u1ed9t chi ti\u1ebft tri\u1ec3n khai ri\u00eang t\u01b0 c\u1ee7a l\u1edbp k\u00e8m theo.\u00a0 Ch\u00fang ta c\u00f3 th\u1ec3 l\u00e0m \u0111i\u1ec1u t\u01b0\u01a1ng t\u1ef1 \u1edf \u0111\u00e2y.<\/p>\n<p>V\u00ed d\u1ee5 (c\u00e1ch gi\u1ea3i quy\u1ebft tr\u01b0\u1edbc \u0111\u00f3 \u0111\u00e3 \u0111\u01b0\u1ee3c tinh ch\u1ec9nh):<\/p>\n<blockquote><p><tt> tr\u00ecnh bao b\u1ecdc l\u1edbp<b> <span style=\"color:#000099;\"> &lt;T&gt;<\/span> <\/b> {<\/tt><br \/>\n<tt> \u00a0 tr\u1eadn chung k\u1ebft ri\u00eang <b> <span style=\"color:#000099;\"> T<\/span> <\/b> \u0111\u1ed1i t\u01b0\u1ee3ng;<\/tt><\/p><\/blockquote>\n<blockquote><p><tt> \u00a0 tr\u00ecnh bao b\u1ecdc c\u00f4ng khai(<b> <span style=\"color:#000099;\"> T<\/span> <\/b> t) { theObject = t; }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng c\u1ed9ng <b> <span style=\"color:#000099;\"> T<\/span> <\/b> getWrapper() { tr\u1ea3 v\u1ec1Object; }<\/tt><tt> \u00a0 c\u00f4ng c\u1ed9ng c\u00f3 th\u1ec3 thay \u0111\u1ed5i<b> &lt;T&gt;<\/b> makeMutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 this.new Mutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 c\u00f4ng khai b\u1ea5t bi\u1ebfn<b> &lt;T&gt;<\/b> makeImmutable() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 this.new Immutable(theObject);<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 t\u0129nh ri\u00eang &lt;A&gt; A makeClone(A theObject) { ... }<\/tt><\/p>\n<p><tt> \u00a0 <b> giao di\u1ec7n c\u00f4ng c\u1ed9ng <\/b> B\u1ea5t bi\u1ebfn&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> giao di\u1ec7n c\u00f4ng c\u1ed9ng <\/b> C\u00f3 th\u1ec3 thay \u0111\u1ed5i&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> ri\u00eang t\u01b0<\/b> l\u1edbp cu\u1ed1i c\u00f9ng ImmutableImplementation <b> th\u1ef1c hi\u1ec7n Immutable&lt;T&gt;<\/b> {\u00a0<\/tt><\/p>\n<p><tt> \u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1eadn chung k\u1ebft ri\u00eang t\u01b0 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 c\u00f4ng khai T getWrappedItem() {<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tr\u1ea3 v\u1ec1 makeClone(theObject);<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0 }<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> \u00a0 <b> ri\u00eang t\u01b0<\/b> l\u1edbp th\u1ef1c hi\u1ec7n c\u00f3 th\u1ec3 thay \u0111\u1ed5i <b> th\u1ef1c hi\u1ec7n Mutable&lt;T&gt;<\/b> {\u00a0<\/tt><br \/>\n<tt> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ... t\u01b0\u01a1ng t\u1ef1 ...<\/tt><br \/>\n<tt> \u00a0 }<\/tt><br \/>\n<tt> }<\/tt><\/p><\/blockquote>\n<p>Nh\u01b0 b\u1ea1n c\u00f3 th\u1ec3 th\u1ea5y, c\u00e1c giao di\u1ec7n c\u00f4ng c\u1ed9ng l\u1ed3ng nhau c\u1ea7n ph\u1ea3i chung chung trong khi c\u00e1c l\u1edbp ri\u00eang b\u00ean trong c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng tham s\u1ed1 lo\u1ea1i c\u1ee7a l\u1edbp k\u00e8m theo.<\/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>Vui l\u00f2ng xem C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p n\u00e0y \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin: <a href=\"http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1\" rel=\"nofollow\">http:\/\/www.angelikalanger.com\/GenericsFAQ\/JavaGenericsFAQ.html#SECTION1<\/a> D\u01b0\u1edbi \u0111\u00e2y l\u00e0 danh s\u00e1ch m\u1ed9t s\u1ed1 c\u00e2u h\u1ecfi quan tr\u1ecdng t\u1eeb C\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p n\u00e0y. V\u00ed d\u1ee5 (thu\u1ed9c h\u01b0\u01a1ng chung): \u1780\u17d2\u179a\u1784 Pair&lt;X,Y&gt; {\u00a0 \u00a0 \u1780\u17d2\u179a X \u1780\u17b6; \u00a0 \u0bae\u0bc6\u0bb0\u0bcd Y \u0baa\u0bbf\u0baf\u0bcd\u0b95\u0bc1; \u00a0 C\u1ed5p c\u00f4ng khai(X a1, Y a2) { \u00a0\u00a0\u00a0 t\u1ea3o ti\u00ean [&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-thuoc-generic","tag-java","tag-java-generic"],"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":"C\u00f4ng \u0111\u1ed3ng \u0111\u1ea1i k\u1ebft th\u1ee9 hai \u1edf Constantinople (381) - s\u1ef1 x\u00e1c nh\u1eadn gi\u00e1o l\u00fd v\u1ec1 Ch\u00faa Th\u00e1nh Th\u1ea7n","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;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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":"C\u00f4ng \u0111\u1ed3ng \u0110\u1ea1i k\u1ebft l\u1ea7n th\u1ee9 n\u0103m c\u1ee7a Constantinople (553): Tranh c\u00e3i v\u1ec1 ba ng\u01b0\u1eddi \u0111\u1ee9ng \u0111\u1ea7u, Di s\u1ea3n th\u1ea7n h\u1ecdc c\u1ee7a Chalcedon v\u00e0 Ch\u00ednh tr\u1ecb c\u1ee7a Ho\u00e0ng \u0111\u1ebf Justinian I","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;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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":"Quan \u0111i\u1ec3m c\u1ee7a t\u00f4i v\u1ec1 Thi\u00ean Ch\u00faa, Kinh Th\u00e1nh v\u00e0 Ch\u00faa Kit\u00f4","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;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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":"V\u00ec Ch\u00faa v\u00e0 v\u0169 tr\u1ee5","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. \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\u2026","rel":"","context":"In &quot;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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":"C\u00f4ng \u0111\u1ed3ng chung th\u1ee9 ba \u1edf Ephesus (431): cu\u1ed9c tranh lu\u1eadn v\u1ec1 m\u1eb7t Kit\u00f4 h\u1ecdc gi\u1eefa Cyril th\u00e0nh Alexandria v\u00e0 Nestorius v\u00e0 vi\u1ec7c kh\u1eb3ng \u0111\u1ecbnh gi\u00e1o l\u00fd v\u1ec1 M\u1eb9 Thi\u00ean Ch\u00faa","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;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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":"C\u00f4ng \u0111\u1ed3ng Constantinople l\u1ea7n th\u1ee9 s\u00e1u (680\u2013681): l\u00ean \u00e1n ch\u1ee7 ngh\u0129a \u0111\u1ed9c th\u1ea7n v\u00e0 kh\u1eb3ng \u0111\u1ecbnh hai \u00fd ch\u00ed v\u00e0 hai h\u00e0nh \u0111\u1ed9ng trong Ch\u00faa Gi\u00easu Kit\u00f4","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;C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c&quot;","block_context":{"text":"C\u00e1c b\u00e0i vi\u1ebft d\u00e0nh cho Kinh th\u00e1nh v\u00e0 v\u1ec1 tinh th\u1ea7n v\u00e0 th\u1ec3 x\u00e1c","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}]}}