{"id":2328,"date":"2009-12-16T18:53:07","date_gmt":"2009-12-16T10:53:07","guid":{"rendered":"https:\/\/lifeparty.idv.tw\/blog\/?p=2328"},"modified":"2009-12-18T19:13:14","modified_gmt":"2009-12-18T11:13:14","slug":"java-%e6%b3%9b%e5%9e%8b%e8%a4%87%e9%9b%9c%e5%97%8e%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/lifeparty.idv.tw\/blog\/archives\/2328","title":{"rendered":"Java \u6cdb\u578b\u8907\u96dc\u55ce\uff1f"},"content":{"rendered":"<p>\u77f3\u982d\u6210\u5728\u3008<a href=\"http:\/\/blog.roodo.com\/rocksaying\/archives\/10914229.html\">\u8207 metavige \u548c alexchen \u5c0d\u8a71 Java \u8a9e\u8a00<\/a>\u3009\u9019\u7bc7\u6587\u7ae0\u4e2d\uff0c\u76f4\u8a00\u4ed6\u5c0d Java \u8a9e\u8a00\u6cdb\u578b\u7684\u6279\u8a55\uff1a<\/p>\n<blockquote><p>\u6211\u4e0d\u8a8d\u70ba Java \u8b93\u6211\u5011\u300c\u6162\u5de5\u51fa\u7d30\u6d3b\u300d\uff0c\u6211\u89ba\u5f97\u5b83\u5e36\u4f86\u7684\u662f\u300c\u5197\u9918\u7684\u8907\u96dc\u6027\u300d\u3002\u5c31\u7b97\u4ee5 C++ \u7684\u89c0\u9ede\u4f86\u770b Java \u7a0b\u5f0f\u78bc\uff0c\u6211\u4ecd\u89ba\u5f97 Java \u7a0b\u5f0f\u78bc\u6709\u8a31\u591a\u4e0d\u5fc5\u8981\u7684\u8907\u96dc\u5ea6\u3002Java \u628a\u985e\u5225\u8b8a\u6210\u65bd\u52a0\u5728\u7a0b\u5e8f\u54e1\u8eab\u4e0a\u7684\u675f\u7e1b\uff0c\u800c\u662f\u4e0d\u662f\u5e6b\u52a9\u6211\u5011\u9032\u884c\u62bd\u8c61\u5316\u8cc7\u6599\u8655\u7406\u7684\u5de5\u5177\u3002<\/p>\n<p>\u6211\u500b\u4eba\u8a8d\u70ba\uff0c\u6240\u8b02\u300c\u66f4\u5f37\u5316\u7684\u975c\u614b\u578b\u614b\u300d\u662f\u8ddf C++ \u6a23\u677f\u76f8\u6bd4\uff0c Java \u6cdb\u578b\u6bd4\u8d77 C++ \u6a23\u677f\u662f\u5728\u8d70\u56de\u982d\u8def\u3002\u5c31\u6211\u5230\u76ee\u524d\u70ba\u6b62\u7684 Java \u4f7f\u7528\u7d93\u9a57\u4f86\u770b\uff0c\u6211\u5e7e\u4e4e\u4ee5\u70ba\u6cdb\u578b\u53ea\u662f Java \u5c08\u9580\u7528\u4f86\u91cd\u65b0\u8a2d\u8a08\u5bb9\u5668\u985e\u5225\u7684\u7279\u6b8a\u8a9e\u6cd5\u3002\u5728\u90a3\u4ee5\u5916\u7684\u5834\u6240\uff0c\u4f60\u5927\u6982\u4e0d\u6703\u60f3\u7528\u6cdb\u578b\u4f86\u91cd\u69cb\u4f60\u7684\u7a0b\u5f0f\u78bc\u3002<\/p>\n<p>metavige \u5c31\u8aaa\u6703\u60f3\u7528 Strategy Pattern \u4f86\u91cd\u69cb\u6211\u5728\u3008<a href=\"http:\/\/blog.roodo.com\/rocksaying\/archives\/10890551.html\">\u5f9e C++ Template \u5230 Java Generic\uff0c\u4e00\u6b65\u4e00\u6b65\u4f86<\/a>\u3009\u8209\u7684\u4f8b\u5b50\uff0c\u800c\u4e0d\u6703\u7528\u6cdb\u578b\u3002\u4f46\u662f\u6cdb\u578b\u96e3\u9053\u4e0d\u662f\u7528\u4f86\u8655\u7406\u9019\u500b\u554f\u984c\u7684\u76f4\u89ba\u60f3\u6cd5\u55ce\uff1f Java \u6c92\u6709\u8db3\u5920\u7406\u7531\u8aaa\u670d\u6211\u5011\u4e0d\u8981\u7528\u6cdb\u578b\u4f86\u505a\uff0c\u4f46\u662f\u7528\u6cdb\u578b\u4f86\u505a&#8230; \u5443\uff0c\u4f3c\u4e4e\u66f4\u56f0\u96e3\u3002 <\/p><\/blockquote>\n<p>\u77f3\u982d\u6210\u7528<a href=\"http:\/\/en.wikipedia.org\/wiki\/Generic_programming\">\u6cdb\u578b<\/a>\u4f86\u91cd\u69cb\u7a0b\u5f0f\u78bc\uff0c\u662f\u4e0d\u662f\u8655\u7406\u4ed6\u7684\u554f\u984c\u4e4b\u76f4\u89ba\u60f3\u6cd5\uff1f\u6211\u60f3\u77f3\u982d\u6210\u6bd4\u8f03\u504f\u597d\u52d5\u614b\u578b\u614b\u8a9e\u8a00\u7684\u81ea\u7531\uff0c\u6bd4\u8f03\u4e0d\u6b23\u8cde\u300c\u66f4\u5f37\u5316\u7684\u975c\u614b\u578b\u614b\u300d\u7684\u505a\u6cd5\u3002\u6216\u8a31\u662f\u56e0\u70ba C++ \u7528 template \u5be6\u4f5c\u4e0d\u6703\u53d7\u5230\u53c3\u6578\u578b\u5225\u985e\u578b\u7684\u9650\u5236\uff0c\u81ea\u7136\u6703\u8b93\u4ed6\u6bd4\u8f03\u60f3\u7528\u6cdb\u578b\u4f86\u91cd\u69cb\u7a0b\u5f0f\uff0c\u4ee5\u53bb\u9664\u8cc7\u6599\u578b\u614b\u8207\u6f14\u7b97\u908f\u8f2f\u7684\u76f8\u4f9d\u6027\u3002\u7136\u800c\uff0c\u770b\u904e\u77f3\u982d\u6210\u6240\u8209\u7684\u5be6\u4f8b\uff0c\u540c\u4eba\u8a8d\u70ba\u7528\u6cdb\u578b\u4f86\u5be6\u4f5c\u7684\u60f3\u6cd5\u672a\u5fc5\u662f\u76f4\u89ba\u7684\u505a\u6cd5\u3002<\/p>\n<p>\u8868\u9762\u4e0a\u770b\u8d77\u4f86\u597d\u50cf\u5be6\u4f5c\u6cdb\u578b\u53ef\u4ee5\u8b93\u67d0\u4e00\u6bb5\u7a0b\u5f0f\u78bc\u91cd\u8907\u4f7f\u7528\uff0c\u4f46 Java \u5728\u6cdb\u578b\u7684\u9650\u5236\uff0c\u4e5f\u589e\u52a0\u4ed6\u91cd\u69cb\u7a0b\u5f0f\u78bc\u7684\u56f0\u96e3\u5ea6\u8207\u8907\u96dc\u5ea6\u3002\u9019\u9ebc\u8aaa\u4f86\uff0c\u5047\u5982\u77f3\u982d\u6210\u7684\u60f3\u6cd5\u662f\u6b63\u78ba\u7684\uff0c\u7528 Java \u7684\u6cdb\u578b\u4f86\u91cd\u69cb\u7a0b\u5f0f\u78bc\uff0c\u53ea\u6703\u8b93\u7a0b\u5f0f\u54e1\u6c92\u4e8b\u81ea\u8a0e\u82e6\u5403\u3002\u7136\u800c\uff0c\u540c\u4eba\u5728\u4ed4\u7d30\u7814\u7a76\u4ed6\u7684\u7a0b\u5f0f\u78bc\u4e4b\u5f8c\uff0c\u767c\u73fe\u53ef\u4ee5\u7528\u66f4\u7c21\u6f54\u7684\u65b9\u5f0f\u4f86\u4f7f\u7528 Java \u7684\u6cdb\u578b\u3002\u4e0d\u904e\uff0c\u9084\u662f\u8b93\u6211\u5011\u5148\u4f86\u770b\u770b\u77f3\u982d\u6210\u7684\u7a0b\u5f0f\u78bc\uff1a<!--more--><\/p>\n<p><u>Cx.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class Cx&lt;DataType extends IDataType&lt;ReturnType&gt;, ReturnType&gt; {\r\n\tprivate DataType data;\r\n\r\n\tpublic Cx(DataType v) {\r\n\t\tdata = v;\r\n\t}\r\n\r\n\tpublic ReturnType getData() {\r\n\t\treturn data.value();\r\n\t}\r\n}\r\n<\/pre>\n<p><u>IDataType.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic interface IDataType&lt;ReturnType&gt; {\r\n\t     public ReturnType value();  \r\n}\r\n<\/pre>\n<p><u>N.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class N implements IDataType&lt;Integer&gt; {\r\n\tprivate Integer n;\r\n\r\n\tpublic N() {\r\n\t\tn = 0;\r\n\t}\r\n\r\n\tpublic N(Integer v) {\r\n\t\tn = v;\r\n\t}\r\n\r\n\tpublic Integer value() {\r\n\t\treturn -n;\r\n\t}\r\n}\r\n<\/pre>\n<p><u>M.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class M implements IDataType&lt;Integer&gt; {\r\n\tprivate Integer m;\r\n\r\n\tpublic M() {\r\n\t\tm = 0;\r\n\t}\r\n\r\n\tpublic M(Integer v) {\r\n\t\tm = v;\r\n\t}\r\n\r\n\tpublic Integer value() {\r\n\t\treturn m * 10;\r\n\t}\r\n}\r\n<\/pre>\n<p><u>S.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class M implements IDataType&lt;Integer&gt; {\r\n\tprivate Integer m;\r\n\r\n\tpublic M() {\r\n\t\tm = 0;\r\n\t}\r\n\r\n\tpublic M(Integer v) {\r\n\t\tm = v;\r\n\t}\r\n\r\n\tpublic Integer value() {\r\n\t\treturn m * 10;\r\n\t}\r\n}\r\n<\/pre>\n<p><u>Main.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class Main {\r\n\tpublic static void main(String[] args) {\r\n\t\tN n = new N(1);\r\n\t\tCx&lt;N, Integer&gt; cn = new Cx&lt;N, Integer&gt;(n);\r\n\t\tSystem.out.println(cn.getData());\r\n\r\n\t\tM m = new M(1);\r\n\t\tCx&lt;M, Integer&gt; cm = new Cx&lt;M, Integer&gt;(m);\r\n\t\tSystem.out.println(cm.getData());\r\n\r\n\t\tS s = new S(\"hello\");\r\n\t\tCx&lt;S, String&gt; cs = new Cx&lt;S, String&gt;(s);\r\n\t\tSystem.out.println(cs.getData());\r\n\t}\r\n}\r\n<\/pre>\n<h4>\u554f\u984c<\/h4>\n<p>\u77f3\u982d\u6210\u8a8d\u70ba\u4ed6\u7684\u7a0b\u5f0f\u5b58\u5728\u5169\u500b\u554f\u984c\u3002\u7b2c\u4e00\u500b\u554f\u984c\u662f\u539f\u4f86 N\u3001M\u3001S \u4e09\u500b\u985e\u5225\u6c92\u6709\u7e7c\u627f\u95dc\u4fc2\uff0c\u4f46\u70ba\u4e86\u7b26\u5408 Java \u6cdb\u578b\u7684\u7279\u6027\uff0c\u5728\u91cd\u69cb\u4e4b\u5f8c\u9019\u4e09\u500b\u985e\u5225\u537b\u5be6\u73fe\u4e86\u540c\u4e00\u500b\u754c\u9762\u3002\u77f3\u982d\u6210\u539f\u4f86\u8a8d\u70ba\u7528\u6cdb\u578b\u89e3\u6c7a\u6f14\u7b97\u6cd5\u91cd\u8907\u554f\u984c\u6642\uff0c\u61c9\u8a72\u4f9d\u7136\u4fdd\u6301\u90a3\u4e09\u500b\u985e\u5225\u4e4b\u9593\u7121\u95dc\u6027\uff0c\u4f46\u91cd\u69cb\u4e4b\u5f8c\u537b\u767c\u73fe Java \u7684\u6cdb\u578b\u4e26\u4e0d\u80fd\u4fdd\u6301\u90a3\u4e09\u500b\u985e\u5225\u7684\u7121\u95dc\u6027\u3002\u96d6\u7136\u5728\u9019\u500b\u7bc4\u4f8b\u4e2d\u5f71\u97ff\u4e0d\u5927\uff0c\u4f46\u4ed6\u9084\u662f\u8a8d\u70ba Java \u5728\u6cdb\u578b\u65b9\u9762\u7684\u8868\u73fe\uff0c\u53ea\u80fd\u7b97\u662f\u52c9\u5f37\u53ca\u683c\u3002<\/p>\n<p>\u7b2c\u4e8c\u500b\u554f\u984c\u662f\u4ed6\u4e0d\u77e5\u9053\u5982\u4f55\u5728 Cx \u4e2d\u589e\u52a0\u9810\u8a2d\u5efa\u69cb\u5b50\uff0c\u4f86\u521d\u59cb\u5316 data \u6210\u54e1\u8b8a\u6578\u3002\u5982\u679c Java \u76f4\u63a5 new \u4e00\u500b\u53c3\u6578\u5316\u578b\u5225\u7684\u5be6\u4f8b\uff0c\u5728\u4e0b\u9762\u7684\u7a0b\u5f0f\u78bc\u7684\u7b2c 5 \u884c\u7684\u5730\u65b9\uff0c\u6703\u51fa\u73fe\u300cUnexpected type\u300d\u7684\u7de8\u8b6f\u932f\u8aa4\u8a0a\u606f\u3002\u4f46\u5728 C++ \u7684 template \u4e2d\uff0c\u9019\u7a2e\u5beb\u6cd5\u537b\u662f\u53ef\u4ee5\u88ab\u63a5\u53d7\u7684\uff0c\u4ee4\u4ed6\u5be6\u5728\u662f\u4e0d\u80fd\u7406\u89e3\uff0cJVM \u70ba\u4ec0\u9ebc\u4e0d\u80fd\u81ea\u5df1\u53cd\u5c04\u53c3\u6578\u5316\u578b\u5225\u4f86\u5efa\u7acb\u7269\u4ef6\u5be6\u9ad4\uff0c\u800c\u8981\u7528\u9019\u500b\u9650\u5236\u4f86\u96e3\u5012\u7a0b\u5f0f\u54e1\u3002<\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class Cx&lt;DataType extends IDataType&lt;ReturnType&gt;, ReturnType&gt; {  \r\n  private DataType data;  \r\n   \r\n  public Cx() {  \r\n    data = new DataType();\r\n  }  \r\n   \r\n  public Cx(DataType v) {  \r\n    data = v;  \r\n  }  \r\n   \r\n  public ReturnType getData() {  \r\n    return data.value();  \r\n  }  \r\n}\r\n<\/pre>\n<p>\u8981\u5c0d\u77f3\u982d\u6210\u63d0\u51fa\u7684\u9019\u5169\u500b\u554f\u984c\u6709\u6bd4\u8f03\u7cbe\u78ba\u7684\u7406\u89e3\uff0c\u4e0d\u80fd\u4e0d\u5c0d <a href=\"http:\/\/en.wikipedia.org\/wiki\/Concept_%28generic_programming%29\">concept \u7684\u6982\u5ff5<\/a>\u6709\u6240\u8a8d\u8b58\u3002\u5728\u6cdb\u578b\u7a0b\u5f0f\u8a2d\u8a08\u4e2d\uff0cconcept \u6307\u7684\u662f\u4e00\u7d44\u578b\u5225\uff0c\u5b83\u5011\u63d0\u4f9b\u67d0\u4e9b\u8a9e\u6cd5\u8207\u8a9e\u610f\u64cd\u4f5c\u7684\u652f\u63f4\u3002concept \u8207\u62bd\u8c61\u57fa\u790e\u985e\u5225\u6709\u95dc\uff0c\u4f46 concept \u4e26\u4e0d\u9700\u8981\u5b50\u578b\u5225\u7684\u95dc\u4fc2\u3002<\/p>\n<p>\u5728 C++\uff0cconcept \u9019\u500b\u8853\u8a9e\u53ea\u662f\u7c21\u55ae\u5730\u547d\u540d\u4e26\u7c21\u55ae\u63cf\u8ff0\u53c3\u6578\u578b\u5225\u7684\u9700\u6c42\uff0c\u800c\u7b26\u5408\u6b64 concept \u7684\u578b\u5225\uff0c\u4e00\u822c\u88ab\u7a31\u70ba model\u3002\u6211\u5011\u4e0d\u80fd\u7528\u7a0b\u5f0f\u8a9e\u8a00\u660e\u78ba\u5730\u8868\u9054 concept\uff0c\u53ea\u80fd\u8868\u793a\u67d0\u7a2e\u53c3\u6578\u578b\u5225\u7684\u7269\u4ef6\u6703\u5617\u8a66\u57f7\u884c\u4ec0\u9ebc\u64cd\u4f5c\uff0c\u4ee5\u53ca\u671f\u5f85\u7684\u5de5\u4f5c\u7d50\u679c\uff1b\u4e5f\u5c31\u662f\u8b93\u5b83\u53ef\u4ee5\u6b63\u5e38\u7684\u7de8\u8b6f\u3002\u4e00\u822c\u4f86\u8aaa\uff0cJava \u53ca C# \u7684\u6cdb\u578b\u8207 C++ \u7684\u6cdb\u578b\u6709\u9ede\u50cf\uff0c\u53ea\u4e0d\u904e\u5b83\u5011\u7528 interface \u4f86\u626e\u6f14 concept \u7684\u89d2\u8272\u3002<\/p>\n<p>\u4f46\u9019\u6a23\u4e00\u4f86\uff0c\u7b26\u5408\u7684\u53c3\u6578\u578b\u5225\u5c31\u53ea\u80fd\u662f\u5be6\u4f5c\u67d0\u500b\u660e\u78ba\u7684\u754c\u9762\uff0c\u7576\u7136 concept \u986f\u7136\u6703\u6bd4 interface \u66f4\u6709\u5f48\u6027\uff0c\u56e0\u70ba concept \u53ef\u660e\u78ba\u4ee3\u66ff\u4e00\u7d44\u578b\u5225\uff0c\u800c\u4e0d\u53ea\u662f\u4e00\u500b\u5be6\u4f5c\u67d0 interface \u7684\u985e\u5225\uff1b\u800c\u4e14\u904b\u7528\u96b1\u5f0f\u5730\u5b9a\u7fa9\u81ea\u52d5 concept\uff0c\u53ef\u4ee5\u8b93\u53c3\u6578\u578b\u5225\u540c\u6642\u4f7f\u7528\u5167\u5efa\u578b\u5225\u6216\u5176\u5b83\u70ba\u4e86\u975e\u7279\u6b8a\u7528\u9014\u7684\u578b\u5225\u3002<\/p>\n<h4>\u76f8\u4f9d\u6027<\/h4>\n<p>\u5f9e\u4ee5\u4e0a\u7684\u89c0\u5ff5\u4f86\u770b\uff0c\u7528 C++ \u7684 template \u4f86\u5be6\u4f5c\u6cdb\u578b\u7a0b\u5f0f\u8a2d\u8a08\uff0c\u7684\u78ba\u6bd4 Java \u7684 interface \u6709\u66f4\u5927\u7684\u5f48\u6027\u3002\u4e0d\u904e\uff0c\u5373\u4f7f\u662f\u4f7f\u7528 concept \u4f86\u8868\u793a\u53c3\u6578\u578b\u5225\uff0c\u5728\u9019\u7d44\u652f\u63f4\u6cdb\u578b\u5be6\u4f5c\u7684\u578b\u5225\u4e2d\uff0c\u5176\u5be6\u4e5f\u5fc5\u9808\u652f\u63f4 concept \u5b9a\u7fa9\u7684\u57fa\u672c\u64cd\u4f5c\u3002\u5c31\u5ee3\u7fa9\u4f86\u8aaa\uff0cmodel \u5fc5\u9808\u4f9d\u5b58\u65bc concept \u6240\u5b9a\u7fa9\u7684\u754c\u9762\u3002\u76f8\u5c0d\u65bc<a href=\"http:\/\/en.wikipedia.org\/wiki\/Liskov_substitution_principle\">\u7269\u4ef6\u5c0e\u5411\u7684 LSP<\/a> \u539f\u5247\uff0c\u5b50\u985e\u5225\u61c9\u8a72\u53ef\u4ee5\u66ff\u63db\u7236\u985e\u5225\uff0cconcept \u8207 model \u4e4b\u9593\u4e5f\u6709\u985e\u4f3c\u7684\u95dc\u4fc2\u3002\u5982\u679c Cb \u662f Ca \u7684\u5f37\u5316 concept\uff1b\u4e5f\u5c31\u662f\u5b9a\u7fa9\u66f4\u591a\u5ef6\u4f38 concept \u6240\u9700\u7684\u64cd\u4f5c\uff0c\u90a3\u9ebc Cb \u7684 model \u5247\u5fc5\u7136\u662f Ca \u7684 model\u3002<\/p>\n<p>\u65bc\u662f\uff0c\u6211\u5011\u770b\u5230\u77f3\u982d\u6210\u7684\u7a0b\u5f0f\uff0cN\u3001M\u3001S \u90fd\u5be6\u4f5c\u76f8\u540c\u7684\u754c\u9762 IDataType\uff0c\u9019\u5c07\u4e0d\u6703\u662f\u500b\u554f\u984c\u3002\u5176\u5be6\u6539\u52d5 N\uff0c\u4e26\u4e0d\u6703\u5f71\u97ff\u5230 M\u3001\u6216\u662f S\uff0c\u56e0\u70ba\u4e09\u8005\u4e26\u4e0d\u76f4\u63a5\u76f8\u4f9d\uff0c\u9664\u975e\u5b83\u5011\u5171\u540c\u5f15\u7528\u7684\u754c\u9762\u8b8a\u52d5\u624d\u6703\u5f71\u97ff\u5230\u5176\u5b83\u5be6\u4f5c\u76f8\u540c\u754c\u9762\u7684\u7a0b\u5f0f\u3002\u4e8b\u5be6\u4e0a\uff0c\u754c\u9762\u5b8c\u5168\u4e0d\u727d\u6d89\u5230\u4efb\u4f55\u5be6\u4f5c\uff0c\u9664\u975e\u754c\u9762\u5b9a\u7fa9\u5f97\u4e0d\u5920\u5b8c\u6574\uff0c\u77f3\u982d\u6210\u6240\u64d4\u5fc3\u7684\u554f\u984c\u624d\u6703\u767c\u751f\u3002\u4f46\u5982\u679c\u662f\u9019\u6a23\uff0c\u90a3\u5c07\u4e0d\u662f\u7a0b\u5f0f\u8a9e\u8a00\u7684\u554f\u984c\uff0c\u800c\u662f\u8a2d\u8a08\u672c\u8eab\u7684\u554f\u984c\u3002<\/p>\n<h4>\u8907\u96dc\u6027<\/h4>\n<p>\u7576\u7136\uff0c\u6211\u5011\u4e5f\u4e0d\u80fd\u5426\u8a8d\u77f3\u982d\u6210\u63d0\u5230\u7684\u53e6\u4e00\u500b\u554f\u984c\uff0c\u662f\u5be6\u969b\u5b58\u5728\u7684\u4e8b\u5be6\u3002Java \u4f7f\u7528 interface \u4f86\u5be6\u4f5c\u6cdb\u578b\u78ba\u5be6\u6709\u6bd4 C++ \u7684\u578b\u5225 concept \u6709\u4e0d\u8db3\u4e4b\u8655\u3002\u4ee5 interface \u4f86\u62bd\u8c61\u5316\u53c3\u6578\u578b\u5225\u6c92\u8fa6\u6cd5\u505a\u5230 default construction \u9019\u7a2e\u578b\u5225 concept\uff0c\u56e0\u70ba\u5b83\u4e0d\u662f\u985e\u5225\uff0c\u6c92\u6709\u8fa6\u6cd5\u81ea\u5df1\u751f\u6210\u7269\u4ef6\u5be6\u9ad4\uff0c\u5fc5\u9808\u8981\u9760\u5916\u754c\u547c\u53eb\u8005\u521d\u59cb\u5316\u53c3\u6578\u578b\u5225\u7269\u4ef6\uff0c\u518d\u50b3\u7d66\u6cdb\u578b\u7269\u4ef6\u624d\u80fd\u6b63\u5e38\u5de5\u4f5c\u3002<\/p>\n<p>\u518d\u52a0\u4e0a Java \u7121\u6cd5\u5728\u57f7\u884c\u671f\u7684\u6642\u5019\u53d6\u5f97\u53c3\u6578\u578b\u5225\u7684\u95dc\u4fc2\uff0c\u6211\u5011\u7121\u6cd5\u76f4\u63a5\u4ee5\u53cd\u5c04\u6a5f\u5236\u7522\u751f\u51fa\u53c3\u6578\u578b\u5225\u7684\u5efa\u69cb\u5f0f\u4f86\u7522\u751f\u7269\u4ef6\u5be6\u9ad4\u3002\u96d6\u7136\u7e5e\u500b\u5708\uff0c\u6211\u5011\u9084\u662f\u53ef\u4ee5\u7528\u53e6\u4e00\u7a2e\u53cd\u5c04\u65b9\u5f0f\u9054\u5230\u76ee\u7684\uff0c\u4f46\u9019\u6a23\u6703\u4f7f\u5f97\u7a0b\u5f0f\u78bc\u8b8a\u5f97\u66f4\u8907\u96dc\u800c\u4e14\u96e3\u4ee5\u7406\u89e3\uff0c\u5be6\u5728\u662f\u6703\u4ee4\u4eba\u671b\u4e4b\u537b\u6b65\u3002\u90a3\u9ebc\u4f7f\u7528 Java \u6cdb\u578b\uff0c\u6709\u6c92\u6709\u6bd4\u8f03\u7c21\u55ae\u7684\u65b9\u6cd5\u53ef\u4ee5\u89e3\u6c7a\u9019\u500b\u554f\u984c\u5462\uff1f<\/p>\n<p><u>C++<\/u><\/p>\n<pre class=\"brush: c++;\">\r\nDataType data; \/\/ default construction\r\n<\/pre>\n<p><u>Java<\/u><\/p>\n<pre class=\"brush: java;\">\r\n\/\/data = new DataType();\r\nParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();\r\ndata = ((Class) pt.getActualTypeArguments()[0]).newInstance(); \r\n<\/pre>\n<h4>\u89e3\u6c7a\u65b9\u6cd5<\/h4>\n<p>\u5176\u5be6\u89e3\u6c7a\u7684\u65b9\u6cd5\u4e26\u4e0d\u96e3\uff0c\u96d6\u7136\u6211\u5011\u5728 Cx \u4ecd\u7136\u5f88\u96e3\u7528\u53c3\u6578\u578b\u5225\u53cd\u5c04\u9810\u8a2d\u5efa\u69cb\u5f0f\u4f86\u5efa\u7acb\u7269\u4ef6\u5be6\u9ad4\uff0c\u4f46\u5982\u679c\u4f60\u5c0d\u540c\u4eba\u904e\u53bb\u767c\u8868\u7684\u3008<a href=\"https:\/\/lifeparty.idv.tw\/blog\/archives\/449\">\u964d\u4f4e\u8cc7\u6599\u5b58\u53d6\u7684\u8907\u96dc\u6027<\/a>\u3009\u9084\u6709\u5370\u8c61\u7684\u8a71\uff0c\u4f60\u53ef\u4ee5\u5f9e\u9019\u7bc7\u6587\u7ae0\u627e\u5230\u89e3\u6c7a\u77f3\u982d\u6210\u554f\u984c\u7684\u65b9\u5411\u3002\u6211\u5011\u53ef\u4ee5\u5728\u9019\u7bc7\u6587\u7ae0\u770b\u5230\uff0c\u5728\u9084\u6c92\u4f7f\u7528 Java \u7684\u6cdb\u578b\u4e4b\u524d\uff0cUserDataAccessorImpl \u6709\u9810\u8a2d\u5efa\u69cb\u5b50\u53ef\u4f9b\u521d\u59cb\u5316 UserDataAccessor \u7684\u7269\u4ef6\u5be6\u9ad4\uff0c\u4f46\u4f7f\u7528 Java \u7684\u6cdb\u578b\u91cd\u69cb\u4e4b\u5f8c\uff0c\u6cdb\u578b\u7248\u672c\u7684 HibernateDataAccessor \u537b\u53ea\u63d0\u4f9b\u6307\u5b9a\u53c3\u6578\u578b\u5225 BizObject \u7684 Class \u5efa\u69cb\u5f0f\u3002\u6240\u4ee5\u4f7f\u7528\u540c\u6a23\u7684\u539f\u7406\uff0c\u6211\u5011\u61c9\u8a72\u4e5f\u53ef\u4ee5\u89e3\u6c7a\u77f3\u982d\u6210\u7684\u7b2c\u4e8c\u500b\u554f\u984c\u3002<\/p>\n<pre class=\"brush: java; tab-size=2\">\r\n\tpublic Cx(Class&lt;? extends IDataType&lt;ReturnType&gt; &gt; dataTypeClazz) throws Exception {\r\n\t\tdata = dataTypeClazz.newInstance();\r\n\t}\r\n<\/pre>\n<p>\u6216\u8a31\u6709\u4eba\u53ef\u80fd\u6703\u8aaa\u6211\u6539\u8b8a\u4e86\u77f3\u982d\u6210\u7b2c\u4e8c\u500b\u554f\u984c\u7684\u9700\u6c42\uff0c\u4ed6\u8981\u7684\u4e0d\u662f\u4ee5 DataType \u7684 Class \u7576\u53c3\u6578\u7684\u5efa\u69cb\u5f0f\uff0c\u800c\u662f\u4e0d\u9700\u8981\u4efb\u4f55\u53c3\u6578\u7684\u9810\u8a2d\u5efa\u69cb\u5f0f\u3002\u4f46\u5176\u5be6\u5e0c\u671b\u5728 Cx \u52a0\u5165\u9810\u8a2d\u5efa\u69cb\u5f0f\u4e26\u4e0d\u662f\u9700\u6c42\uff0c\u800c\u662f\u70ba\u4e86\u89e3\u6c7a\u554f\u984c\u7684\u9700\u6c42\u6240\u505a\u7684\u5047\u8a2d\uff0c\u8981\u8a8d\u6e05\u9700\u6c42\u6211\u5011\u5fc5\u9808\u8cea\u7591\u5b58\u5728\u9019\u500b\u5047\u8a2d\u80cc\u5f8c\u7684\u554f\u984c\u3002<\/p>\n<p>\u7576\u6211\u5011\u60f3\u5230 Cx \u70ba\u4ec0\u9ebc\u9700\u8981\u9810\u8a2d\u5efa\u69cb\u5f0f\u7684\u6642\u5019\u6703\u767c\u73fe\uff0c\u6709\u4e9b\u6642\u5019\u56e0\u70ba\u8981<a href=\"https:\/\/lifeparty.idv.tw\/blog\/archives\/271\">\u8de8\u8d8a\u9060\u7aef\u754c\u9762\u547c\u53eb\u7684\u85e9\u96e2<\/a>\uff0c\u53ef\u80fd\u6c92\u8fa6\u6cd5\u7531\u547c\u53eb\u8005\u7522\u751f\u53c3\u6578\u578b\u5225\u7684\u7269\u4ef6\u50b3\u7d66 Cx\uff0c\u800c\u8981\u7531 Cx \u81ea\u5df1\u521d\u59cb\u53c3\u6578\u578b\u5225\u7269\u4ef6\u3002\u4f46\u901a\u5e38\u50b3\u5165\u53c3\u6578\u578b\u5225\u7269\u4ef6\u7684 Class \u662f\u53ef\u884c\u7684\uff0c\u56e0\u70ba\u904b\u7528 Java \u7684\u53cd\u5c04\u6a5f\u5236\uff0c\u50b3\u905e Class \u5c31\u597d\u50cf\u50b3\u905e String \u4e00\u6a23\u7c21\u55ae\u3002<\/p>\n<h4>\u66f4\u76f4\u89ba\u7684\u505a\u6cd5<\/h4>\n<p>\u5beb\u5230\u9019\u88e1\uff0c\u77f3\u982d\u6210\u7684\u554f\u984c\u61c9\u8a72\u662f\u89e3\u6c7a\u4e86\u3002\u4e0d\u904e\u56de\u5230\u9019\u7bc7\u6587\u7ae0\u540c\u4eba\u4e00\u958b\u59cb\u6240\u63d0\u5230\u7684\uff0c\u77f3\u982d\u6210\u6240\u8209\u7684\u5be6\u4f8b\uff0c\u6211\u8a8d\u70ba\u7528\u6cdb\u578b\u4f86\u5be6\u4f5c\u7684\u60f3\u6cd5\u672a\u5fc5\u662f\u76f4\u89ba\u7684\u505a\u6cd5\u3002\u90a3\u9ebc\u540c\u4eba\u8a8d\u70ba\u66f4\u76f4\u89ba\u7684\u505a\u6cd5\u662f\u4ec0\u9ebc\uff1f\u5176\u5be6\u6211\u4e0d\u6703\u5b8c\u5168\u7528\u6cdb\u578b\u4f86\u89e3\u6c7a\u77f3\u982d\u6210\u7684\u554f\u984c\uff0c\u800c\u662f\u904b\u7528\u591a\u578b\u4f86\u5c01\u88dd\u6f14\u7b97\u6cd5\u7684\u5dee\u7570\u6027\uff0c\u518d\u642d\u914d\u6cdb\u578b\u4f86\u5f37\u5316\u53c3\u6578\u578b\u5225\u7684\u4e00\u81f4\u6027\u3002\u9019\u6a23\u6211\u53ea\u9700\u8981\u4fee\u6539\u77f3\u982d\u6210\u7684 Cx \u985e\u5225\u8207 Main \u4e3b\u7a0b\u5f0f\u78bc\uff0c\u5982\u4e0b\u9762\u9019\u6bb5\u7a0b\u5f0f\u78bc\u6240\u793a\uff0c\u540c\u4eba\u8a8d\u70ba\u662f\u66f4\u70ba\u7c21\u55ae\u800c\u76f4\u89ba\u7684\u505a\u6cd5\u3002<\/p>\n<p><u>Cx.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class Cx&lt;ReturnType&gt; {\r\n\tIDataType&lt;ReturnType&gt; data;\r\n\t\r\n\tpublic Cx(Class&lt;? extends IDataType&lt;ReturnType&gt; &gt; dataTypeClazz) throws Exception {\r\n\t\tdata = dataTypeClazz.newInstance();\r\n\t}\r\n\t\r\n\tpublic Cx(IDataType&lt;ReturnType&gt; data) {\r\n\t\tthis.data = data;\r\n\t}\r\n\t\r\n\tpublic ReturnType getData() {\r\n\t\treturn data.value();\r\n\t}\r\n}\r\n<\/pre>\n<p><u>Main.java<\/u><\/p>\n<pre class=\"brush: java; tab-size: 2\">\r\npublic class Main {\r\n\tpublic static void main(String[] args) {\r\n\t\tN n = new N(1);\r\n\t\tCx&lt;Integer&gt; cn = new Cx&lt;Integer&gt;(n);\r\n\t\tSystem.out.println(cn.getData());\r\n\r\n\t\tM m = new M(1);\r\n\t\tCx&lt;Integer&gt; cm = new Cx&lt;Integer&gt;(m);\r\n\t\tSystem.out.println(cm.getData());\r\n\r\n\t\tS s = new S(\"hello\");\r\n\t\tCx&lt;String&gt; cs = new Cx&lt;String&gt;(s);\r\n\t\tSystem.out.println(cs.getData());\r\n\t}\r\n}\r\n<\/pre>\n<p>\u4e0a\u9762\u9019\u4e00\u6bb5\u7a0b\u5f0f\u78bc\uff0c\u5c07\u985e\u5225 Cx \u7576\u4e2d\u7684 data \u7684\u578b\u5225\uff0c\u7531 DataType \u53c3\u6578\u578b\u5225\u6539\u6210 IDataType \u7684\u591a\u578b\u754c\u9762\u3002\u9019\u6a23\u4e00\u4f86\uff0cdata \u7684\u62bd\u8c61\u6982\u5ff5\u5c31\u5f9e\u53c3\u6578\u578b\u5225\u8f49\u79fb\u5230\u591a\u578b\u754c\u9762\uff0c\u6b64\u754c\u9762\u5c01\u88dd\u4e86\u4e0d\u540c\u7684\u8cc7\u6599\u578b\u614b\u884c\u70ba\u7684\u62bd\u8c61\u6982\u5ff5\u3002\u5982\u6b64\u4e00\u4f86\uff0cCx \u53ef\u6e1b\u5c11\u4e86\u4e00\u500b\u53c3\u6578\u578b\u5225\uff0c\u7a0b\u5f0f\u78bc\u4e5f\u8b8a\u5f97\u7c21\u660e\u6613\u61c2\u3002\u5f9e Main \u547c\u53eb\u7aef\u7684\u7a0b\u5f0f\u78bc\u5c31\u53ef\u4ee5\u767c\u73fe\uff0c\u5c11\u4e86\u4e00\u500b\u53c3\u6578\u578b\u5225\uff0c\u7a0b\u5f0f\u78bc\u4e5f\u8b8a\u5f97\u7c21\u6f54\u8a31\u591a\u3002<\/p>\n<p>\u9019\u6bb5\u7a0b\u5f0f\u78bc\u4e5f\u8b93\u6211\u5011\u767c\u73fe\u6cdb\u578b\u53ef\u4ee5\u5f37\u5316\u591a\u578b\u754c\u9762\u7684\u8cc7\u6599\u578b\u5225\u3002\u5047\u5982\u6c92\u6709\u6cdb\u578b\uff0c\u6211\u5011\u5c31\u53ea\u80fd\u5728 DataType \u7684 value() \u56de\u50b3\u503c\u5b9a\u7fa9\u6210\u53ef\u4ee5\u5305\u5bb9\u5404\u7a2e\u8cc7\u6599\u7684\u578b\u5225\uff1b\u4f8b\u5982 String \u6216 Object\uff0c\u7136\u5f8c\u518d\u904b\u7528\u8cc7\u6599\u8f49\u63db\u6216\u5f37\u5236\u8f49\u578b\u7684\u65b9\u5f0f\u53d6\u5f97\u6211\u5011\u9700\u8981\u7684\u8cc7\u6599\u683c\u5f0f\uff0c\u4f46\u9019\u4e9b\u65b9\u6cd5\u5f88\u5bb9\u6613\u51fa\u932f\uff0c\u800c\u4e14\u6703\u9020\u6210\u7a0b\u5f0f\u958b\u767c\u4e0d\u5c0f\u7684\u8ca0\u64d4\u3002\u7576\u6211\u5011\u904b\u7528\u6cdb\u578b\u4f86\u5f37\u5316\u591a\u578b\u754c\u9762\u7684\u578b\u5225\uff0c\u7a0b\u5f0f\u54e1\u5c31\u4e0d\u7528\u5728\u9019\u65b9\u9762\u50b7\u8166\u7b4b\u4e86\uff0c\u800c\u4e14\u8a2d\u8a08\u7684\u5b8c\u6574\u6982\u5ff5\u4e5f\u66f4\u5bb9\u6613\u7dad\u6301\u3002<\/p>\n<h4>\u6cdb\u578b\u8207\u591a\u578b\u7684\u5dee\u5225<\/h4>\n<p>\u5c31\u8a2d\u8a08\u7684\u89c0\u9ede\u4f86\u770b\uff0c\u53c3\u6578\u578b\u5225\u4e26\u4e0d\u662f\u771f\u6b63\u7684\u5be6\u9ad4\u578b\u5225\uff0c\u5982\u679c\u6c92\u6709 default construction \u7684 concept\uff0c\u6211\u5011\u6c92\u8fa6\u6cd5\u62ff\u5b83\u4f86\u7522\u751f\u4efb\u4f55\u5be6\u9ad4\u578b\u5225\u7684\u5be6\u9ad4\u3002\u591a\u578b\u7684\u89e3\u6c7a\u65b9\u6848\uff0c\u662f\u904b\u7528\u578b\u5225\u4f86\u62bd\u8c61\u5316\u578b\u5225\uff0c\u8207\u6cdb\u578b\u7528\u578b\u5225\u7684 concept \u4f86\u62bd\u8c61\u5316\u578b\u5225\u662f\u4e0d\u540c\u7684\u62bd\u8c61\u89c0\u9ede\u3002\u5f8c\u8005\u5982\u679c\u60f3\u5728 Java \u7684\u6cdb\u578b\u4f86\u53d6\u4ee3\u591a\u578b\u7684\u89e3\u6cd5\uff0c\u5176\u5be6\u662f\u6703\u8b93\u7a0b\u5f0f\u54e1\u9047\u5230\u5f88\u591a\u9ebb\u7169\u7684\u3002<\/p>\n<p>\u5176\u5be6\u5373\u4f7f\u63db\u6210 C++\uff0c\u540c\u4eba\u4e0d\u6703\u628a\u4e0d\u540c\u8cc7\u6599\u578b\u614b\u4ee5 DataType \u53c3\u6578\u578b\u5225\u62bd\u8c61\u5316\u3002\u96d6\u7136 C++ \u7684 template \u771f\u7684\u5f88\u6709\u5f48\u6027\uff0c\u4f46\u90a3\u4e26\u4e0d\u610f\u5473\u8457\u4f7f\u7528\u5b83\u4e0d\u9700\u8981\u70ba\u9019\u4e9b\u5f48\u6027\u4ed8\u51fa\u4ee3\u50f9\u3002\u4f8b\u5982\uff0c\u4f7f\u7528 C++ template \u7de8\u7a0b\uff0c\u5728\u9664\u932f\u4e0a\u6216\u8655\u7406\u7de8\u8b6f\u7684\u932f\u8aa4\u6703\u6bd4\u6c92\u6709\u4f7f\u7528 template \u9084\u8981\u56f0\u96e3\u8a31\u591a\u3002<\/p>\n<p>\u5c24\u5176\u662f C++ template \u7684\u7de8\u8f2f\u932f\u8aa4\u8a0a\u606f\uff0c\u5e38\u8b93\u4eba\u641e\u4e0d\u6e05\u695a\u932f\u8aa4\u5728\u90a3\u88e1\uff0c\u5f80\u5f80\u8981\u82b1\u8cbb\u5f88\u5927\u7684\u5de5\u592b\u624d\u627e\u5230\u7a0b\u5f0f\u54e1\u7121\u5fc3\u72af\u4e0b\u5fae\u4e0d\u8db3\u9053\u7684\u932f\u8aa4\u3002\u6240\u4ee5\uff0c C++ \u7684 template \u7d66\u4e88\u7a0b\u5f0f\u54e1\u76f8\u7576\u5927\u7684\u5f48\u6027\uff0c\u4f46\u904e\u5ea6\u5730\u4f7f\u7528\u5b83\uff0c\u4e5f\u5f88\u5bb9\u6613\u8b93\u7a0b\u5f0f\u78bc\u7522\u751f\u4e0d\u5fc5\u8981\u7684\u8907\u96dc\u5ea6\u3002<\/p>\n<p>\u4f9d\u540c\u4eba\u7684\u7d93\u9a57\u986f\u793a\uff0c\u8a31\u591a\u8868\u9762\u4e0a\u6cdb\u578b\u4f3c\u4e4e\u53ef\u4ee5\u7528\u4f86\u89e3\u6c7a\u7684\u591a\u578b\u554f\u984c\uff0c\u4f46\u4e00\u65e6\u7528\u6cdb\u578b\u4f86\u89e3\uff0c\u5e38\u6703\u56e0\u70ba\u62bd\u8c61\u5316\u5c64\u6b21\u4e0d\u540c\u7684\u9694\u95a1\u800c\u4f7f\u554f\u984c\u66f4\u70ba\u8907\u96dc\u3002<\/p>\n<p>\u6cdb\u578b\u7684\u539f\u7406\u662f\u5f15\u7528 concept \u4f86\u4ee3\u8868\u5404\u7a2e\u53ef\u4f9b\u53c3\u6578\u5316\u7684\u578b\u5225\uff0c\u800c\u591a\u578b\u5247\u662f\u4f7f\u7528\u62bd\u8c61\u985e\u5225\u6216\u754c\u9762\u4f86\u5c01\u88dd\u5177\u9ad4\u985e\u5225\u3002\u5169\u8005\u7684\u62bd\u8c61\u5316\u7684\u89c0\u9ede\u4e0d\u4e00\u6a23\uff0c\u4e00\u7a2e\u662f\u578b\u5225\u7684\u96c6\u5408\u5c0d\u500b\u5225\u578b\u5225\u7684\u95dc\u4fc2\uff0c\u53e6\u4e00\u7a2e\u5247\u662f\u578b\u5225\u8207\u578b\u5225\u7684\u95dc\u4fc2\u3002<\/p>\n<p>\u524d\u8005\u7684\u95dc\u4fc2\u6211\u5011\u7a31\u70ba\u67d0\u4e9b\u578b\u5225\u662f\u67d0\u500b concept \u7684 model\uff0c\u800c\u5f8c\u8005\u7684\u95dc\u4fc2\u5247\u662f\u578b\u5225\u4e4b\u9593\u7684\u4e00\u822c\u5316\u6216\u5be6\u73fe\u95dc\u4fc2\u3002\u5169\u8005\u5728\u672c\u8cea\u4e0a\u7684\u6982\u5ff5\u662f\u4e0d\u4e00\u6a23\u7684\uff0c\u56e0\u6b64\u7576\u6211\u5011\u60f3\u7528 concept \u4f86\u4ee3\u66ff <a href=\"http:\/\/en.wikipedia.org\/wiki\/Inheritance_%28computer_science%29\">inheritance<\/a>\uff0c\u6216\u662f\u7528 inheritance \u4f86\u53d6\u4ee3 concept\uff0c\u6700\u5f8c\u90fd\u5fc5\u7136\u6703\u8b93\u6211\u5011\u9047\u5230\u5be6\u4f5c\u8207\u6982\u5ff5\u4e0a\u7684\u9694\u95a1\u3002<\/p>\n<p>\u7576\u4e00\u500b\u985e\u5225 A \u4f7f\u7528\u5230\u6cdb\u578b\u985e\u5225 B \u6642\uff0c\u6211\u5011\u5c31\u5fc5\u9808\u6307\u660e\u4f7f\u7528 B \u6240\u9700\u8981\u7684\u53c3\u6578\u578b\u5225\uff0c\u8981\u4e0d\u7136\u5c31\u5fc5\u9808\u7531\u4f7f\u7528\u5230\u985e\u5225 A \u7684\u985e\u5225 C \u6307\u5b9a\u9700\u8981\u7684\u53c3\u6578\u578b\u5225\u3002\u6240\u4ee5\u5982\u679c\u985e\u5225 A \u60f3\u8981\u4e0d\u4fb7\u9650\u5728\u67d0\u7a2e\u8cc7\u6599\u578b\u5225\uff0c\u90a3\u9ebc\u4f7f\u7528\u6cdb\u578b\u985e\u5225 B \u7684\u4ee3\u50f9\u5c31\u5fc5\u9808\u662f\u8b93\u985e\u5225 A \u4e5f\u8b8a\u6210\u6cdb\u578b\u7269\u4ef6\u3002\u6240\u4ee5\u5927\u91cf\u4f7f\u7528\u6cdb\u578b\u7684\u7d50\u679c\uff0c\u6703\u4f7f\u4f60\u4e00\u5c64\u53c8\u4e00\u5c64\u5730\u4f7f\u7528\u53c3\u6578\u578b\u5225\uff0c\u9019\u7576\u7136\u662f\u6bd4\u591a\u578b\u8907\u96dc\u8a31\u591a\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u4ee5\u6cdb\u578b\u4f86\u53d6\u4ee3\u591a\u578b\u66f4\u9ebb\u7169\u7684\u662f\uff0c\u4e0d\u540c\u53c3\u6578\u578b\u5225\u7684\u6cdb\u578b\u7269\u4ef6\u662f\u5b8c\u5168\u4e0d\u540c\u7684\u985e\u5225\uff0c\u5b83\u5011\u4e0d\u50cf\u591a\u578b\u53ef\u4ee5\u7528\u540c\u6a23\u7684\u65b9\u5f0f\u4f86\u8655\u7406\u4e0d\u540c\u8cc7\u6599\u578b\u614b\u3002\u6240\u4ee5\u96d6\u7136\u8868\u9762\u4e0a\u6cdb\u578b\u7701\u53bb\u7e7c\u627f\u985e\u5225\u6216\u5be6\u4f5c\u754c\u9762\u7684\u5de5\u4f5c\uff0c\u770b\u8d77\u4f86\u6bd4\u591a\u578b\u7684\u89e3\u6c7a\u65b9\u6cd5\u6709\u66f4\u5927\u7684\u81ea\u7531\u5ea6\u3002\u4f46\u9019\u4e5f\u610f\u5473\u8457\u6cdb\u578b\u53ef\u80fd\u6703\u7f3a\u5c11\u5c0d\u554f\u984c\u8a9e\u610f\u5c01\u88dd\u62bd\u8c61\u6982\u5ff5\uff0c\u53ea\u662f\u7ad9\u5728\u5be6\u4f5c\u89c0\u9ede\u4ee5\u4e00\u81f4\u6027\u7684\u65b9\u6cd5\u4f86\u6eff\u8db3\u9700\u6c42\u3002<\/p>\n<p>\u7a0b\u5f0f\u54e1\u4e0d\u8a72\u70ba\u4e86\u8caa\u5716\u4e00\u81f4\u6027\u800c\u5ffd\u7565\u591a\u6a23\u6027\uff0c\u800c\u662f\u61c9\u8a72\u6309\u7167\u5be6\u969b\u7684\u9700\u8981\u4f86\u89e3\u6c7a\u554f\u984c\u3002\u6240\u4ee5\u91cd\u9ede\u4e0d\u662f Java \u6cdb\u578b\u662f\u5426\u8907\u96dc\uff0c\u800c\u662f\u6211\u5011\u80fd\u4e0d\u80fd\u904b\u7528\u8a2d\u8a08\u4f7f\u5b83\u8b8a\u5f97\u66f4\u7c21\u55ae\u3002\u8a9e\u8a00\u7684\u9650\u5236\u672a\u5fc5\u662f\u52a0\u8af8\u5728\u7a0b\u5f0f\u54e1\u8eab\u4e0a\u7684\u675f\u7e1b\uff0c\u800c\u53ef\u80fd\u662f\u8b93\u6211\u5011\u9032\u884c\u601d\u8003\u4ee5\u767c\u63ee\u8a2d\u8a08\u5275\u610f\u7684\u6a5f\u6703\u5440\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8868\u9762\u4e0a\u770b\u8d77\u4f86\u597d\u50cf\u5be6\u4f5c\u6cdb\u578b\u53ef\u4ee5\u8b93\u67d0\u4e00\u6bb5\u7a0b\u5f0f\u78bc\u91cd\u8907\u4f7f\u7528\uff0c\u4f46 Java \u5728\u6cdb\u578b\u7684\u9650\u5236\uff0c\u4e5f\u589e\u52a0\u4ed6\u91cd\u69cb\u7a0b\u5f0f\u78bc\u7684\u56f0\u96e3\u5ea6\u8207\u8907\u96dc\u5ea6\u3002\u9019\u9ebc\u8aaa\u4f86\uff0c\u5047\u5982\u77f3\u982d\u6210\u7684\u60f3\u6cd5\u662f\u6b63\u78ba\u7684\uff0c\u7528 Java \u7684\u6cdb\u578b\u4f86\u91cd\u69cb\u7a0b\u5f0f\u78bc\uff0c\u53ea\u6703\u8b93\u7a0b\u5f0f\u54e1\u6c92\u4e8b\u81ea\u8a0e\u82e6\u5403\u3002\u7136\u800c\uff0c\u540c\u4eba\u5728\u4ed4\u7d30\u7814\u7a76\u4ed6\u7684\u7a0b\u5f0f\u78bc\u4e4b\u5f8c\uff0c\u767c\u73fe\u53ef\u4ee5\u7528\u66f4\u7c21\u6f54\u7684\u65b9\u5f0f\u4f86\u4f7f\u7528 Java \u7684\u6cdb\u578b\u3002 <a href=\"https:\/\/lifeparty.idv.tw\/blog\/archives\/2328\">\u95b1\u8b80\u5168\u6587 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,22,24,49,37,43,19,3],"tags":[],"class_list":["post-2328","post","type-post","status-publish","format-standard","hentry","category-29","category-22","category-24","category-49","category-37","category-43","category-19","category-3"],"_links":{"self":[{"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/posts\/2328","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/comments?post=2328"}],"version-history":[{"count":157,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/posts\/2328\/revisions"}],"predecessor-version":[{"id":2474,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/posts\/2328\/revisions\/2474"}],"wp:attachment":[{"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/media?parent=2328"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/categories?post=2328"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lifeparty.idv.tw\/blog\/wp-json\/wp\/v2\/tags?post=2328"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}