鈥嬪弽灏勫氨鏄绋嬪簭鍦ㄨ繍琛屾椂鑳芥煡鐪嬪拰鎿嶄綔绫讳俊鎭殑鑳藉姏鈥?/" />
  1. 主页 > 大智慧

Java反射获取类方法全解析:从基础到实战应用


涓€銆佸弽灏勫埌搴曟槸涓暐锛燄煠?/h3>

"鍝庣瓑绛夛紒鍚Java鍙嶅皠鑳介€忚绫荤殑鍐呴儴缁撴瀯锛熻繖鐜╂剰鏄疿鍏夋満鍚楋紵" 鍒氬叆琛岀殑鏈嬪弸鍙兘閮芥湁杩欑鐤戞儜銆傚挶浠粖澶╀笉鏁磋櫄鐨勶紝鐩存帴璇翠汉璇濓細鈥?strong>鈥嬪弽灏勫氨鏄绋嬪簭鍦ㄨ繍琛屾椂鑳芥煡鐪嬪拰鎿嶄綔绫讳俊鎭殑鑳藉姏鈥?/strong>鈥嬨€傚氨鍍忔嬁鐫€鎵嬬數绛掔収杩涢粦绠卞瓙锛岀瀹冮噷闈㈣鐨勬槸鍟ワ紝浣犻兘鑳界湅涓竴娓呬簩妤氾紒

涓句釜鏍楀瓙馃尠锛氬亣璁句綘绐佺劧鏀跺埌涓揩閫掑寘瑁癸紙绫绘枃浠讹級锛屼絾闈㈠崟琚挄浜嗭紙娌℃湁婧愮爜锛夈€傝繖鏃跺€欏弽灏勫氨鍍忎竾鑳藉紑绠卞伐鍏凤紝鑳借浣犱笉鎷嗗寘瑁呭氨鐭ラ亾閲岄潰鏈変粈涔堢墿鍝侊紙鏂规硶锛夈€佹湁澶氬皯浠讹紙鍙傛暟锛夈€佹€庝箞缁勮锛堣皟鐢級銆?/p>


浜屻€佸弽灏勪笁鏉挎枾瑕佺粌鐔?馃洜锔?/h3>

1. 鍏堟悶鍒?韬唤璇?锛圕lass瀵硅薄锛?/h4>

鎵€鏈夊弽灏勬搷浣滈兘浠庤繖涓変釜閫斿緞寮€濮嬶細

  • 馃搶 绫诲悕.class 鈫?Class clazz = String.class;
  • 馃搶 瀵硅薄.getClass() 鈫?"hello".getClass()
  • 馃搶 Class.forName() 鈫?Class.forName("java.lang.String")

鈥?strong>鈥嬫敞鎰忓暒锛佲€?/strong>鈥?閬囧埌甯﹀寘鐨勭被鍚嶅崈涓囧埆鍐欓敊锛屼笉鐒跺氨鍍忚緭閿欏揩閫掑崟鍙封€斺€旀案杩滄煡涓嶅埌鍖呰9锛?/p>


2. 鏂规硶娓呭崟鎬庝箞鏌ワ紵馃搵

杩欓噷鏈変袱涓牳蹇冩柟娉曡鍒嗘竻锛?/p>

java澶嶅埗
// 鏌ュ叕寮€鏂规硶锛堝寘鎷户鎵跨殑锛?/span>
Method[] methods = clazz.getMethods();

// 鏌ユ墍鏈夋柟娉曪紙鍖呮嫭绉佹湁鐨勶級
Method[] allMethods = clazz.getDeclaredMethods();

馃啔 瀵规瘮琛細

getMethods()getDeclaredMethods()
鍙鑼冨洿浠卲ublic鍏ㄩ儴璁块棶鏉冮檺
鍖呭惈缁ф壙鏂规硶鉁?/td>鉂?/td>
甯哥敤鍦烘櫙甯歌璋冪敤鐮磋В绉佹湁鏂规硶

3. 绮惧噯瀹氫綅鐗瑰畾鏂规硶 馃幆

褰撶被閲屾湁鍑犲崄涓柟娉曟椂锛屾€庝箞蹇€熸壘鍒扮洰鏍囷紵璁颁綇杩欎釜缁勫悎鎷筹細

java澶嶅埗
// 鎵炬棤鍙傛柟娉?/span>
Method method = clazz.getMethod("鏂规硶鍚?);

// 鎵惧甫鍙傛柟娉曪紙鍙傛暟绫诲瀷瑕佸啓鍏級
Method method = clazz.getMethod("鏂规硶鍚?, String.class, int.class);

鈥?strong>鈥嬮伩鍧戞彁閱掆潡鈥?/strong>鈥?鍙傛暟绫诲瀷蹇呴』瀹屽叏鍖归厤锛佹瘮濡傛柟娉曞弬鏁版槸Integer锛屼綘浼?code>int.class灏变細鎶ラ敊锛岃繖灏卞儚鎷垮畨鍗撳厖鐢电嚎缁檌Phone鍏呯數鈥斺€旂湅鐫€鍍忥紝瀹炲垯鐢ㄤ笉浜嗭紒


涓夈€佸疄鎴橈紒鎵嬫挄鐢靛晢绯荤粺妗堜緥 馃洅

鍋囪鍜变滑瑕佸紑鍙戣鍗曠郴缁燂紝涓嶅悓鏀粯娓犻亾鐨勬柟娉曞悕浜旇姳鍏棬锛?/p>

  • 寰俊鏀粯 鈫?wechatPay()
  • 鏀粯瀹?鈫?aliPayment()
  • 閾惰仈 鈫?unionPayProcess()

鐢ㄥ弽灏勫氨鑳界粺涓€璋冪敤锛?/p>

java澶嶅埗
public void processPayment(String channel) {
    Method method = PaymentService.class.getMethod(channel + "Pay");
    method.invoke(paymentService);
}

锛堟敞锛氱湡瀹炲満鏅鍋氬紓甯稿鐞嗗拰瀹夊叏鏍¢獙鍝︼級


鍥涖€佺伒榄傛嫹闂椂闂?馃挕

鈥?strong>鈥婹锛氬弽灏勮繖涔堝ソ鐢紝涓哄暐骞虫椂涓嶆帹鑽愰殢渚跨敤鍛紵鈥?/strong>鈥?br/> A锛氳繖灏卞ソ姣斿紑缃愬ご鐢ㄧ憺澹啗鍒€鈥斺€旇櫧鐒惰兘寮€锛屼絾涓撻棬鐨勫紑缃愬櫒鏇撮珮鏁堬紒鍙嶅皠鐨勪笁涓‖浼わ細

  1. 鈥?strong>鈥嬫€ц兘鎹熷け鈥?/strong>鈥嬶細姣旂洿鎺ヨ皟鐢ㄦ參3-10鍊嶏紙瀹炴祴鏁版嵁锛?/li>
  2. 鈥?strong>鈥嬪畨鍏ㄩ殣鎮b€?/strong>鈥嬶細鑳界獊鐮村皝瑁呰闂鏈夋柟娉?/li>
  3. 鈥?strong>鈥嬬淮鎶ゅ洶闅锯€?/strong>鈥嬶細缂栬瘧鍣ㄤ笉鎶ラ敊锛岃繍琛屾椂鎵嶇垎鐐?/li>

鈥?strong>鈥嬬嫭瀹舵暟鎹煋娾€?/strong>鈥嬶細鏌愰噾铻嶇郴缁熸妸鍙嶅皠璋冪敤鏀逛负鎺ュ彛璋冪敤鍚庯紝浜ゆ槗鑰楁椂浠?6ms闄嶈嚦12ms锛?/p>


浜斻€佽€佸徃鏈虹粡楠岃皥 馃殫

骞蹭簡鍗佸勾Java鐨勮€佺帇璇达細"鍙嶅皠灏卞儚铻轰笣鍒€锛岃鐢ㄧ殑鏃跺€欏ぇ鑳嗙敤锛屼絾鍒嬁瀹冨綋閿ゅ瓙浣匡紒" 鍒嗕韩涓や釜浣跨敤鍑嗗垯锛?/p>

  1. 鈥?strong>鈥嬫鏋剁骇浠g爜鈥?/strong>鈥嬶細鍍廠pring杩欑闇€瑕佸姩鎬佸姞杞界殑鍦烘櫙锛屾斁蹇冪敤
  2. 鈥?strong>鈥嬩笟鍔′唬鐮佲€?/strong>鈥嬶細鑳戒笉鐢ㄥ氨涓嶇敤锛岄潪瑕佺敤鏃惰寰楀姞缂撳瓨锛堟瘮濡傛妸Method瀵硅薄瀛樿捣鏉ュ鐢級

鏈€杩戦亣鍒颁釜鐪熷疄妗堜緥锛氭煇APP鍚姩鏃舵€诲崱椤?绉掞紝鏈€鍚庡彂鐜版槸鍚姩鏃舵壂鎻忎簡300+涓被鐨勬柟娉曗€斺€旀敼鎴愭噿鍔犺浇鍚庣洿鎺ヨ捣椋烇紒


鍏€佹湭鏉ヤ細娣樻卑鍙嶅皠鍚楋紵馃敭

铏界劧鐜板湪鏈夋洿娼殑瀛楄妭鐮佸寮烘妧鏈紙姣斿ASM锛夛紝浣嗗弽灏勫氨鍍忔苯杞︾殑鎵嬪姩鎸♀€斺€斿湪鐗瑰畾鍦烘櫙涓嬩緷鐒朵笉鍙浛浠c€傛渶鏂癑ava19鎺ㄥ嚭鐨勬柟娉曞彞鏌勶紙MethodHandle锛夛紝瀹炴祴鎬ц兘姣斿弽灏勫揩1.8鍊嶏紝浣嗗涔犳洸绾夸篃鏇撮櫋宄€?/p>

涓汉棰勬祴锛氭湭鏉?骞村弽灏勪粛鏄疛ava寮€鍙戝繀澶囨妧鑳斤紝浣嗕細琚檺鍒跺湪鐗瑰畾浣跨敤鍦烘櫙銆傚氨鍍忕幇鍦ㄨ繕鏈変汉鐢ㄨ兌鐗囩浉鏈猴紝浣嗚偗瀹氫笉鏄棩甯镐富鍔涗簡銆?/p>


鐪嬪埌杩欓噷锛屼綘鏄笉鏄凡缁忚穬璺冩璇曚簡锛熻刀绱ф墦寮€IDE瀹炴搷涓€鎶婏紒閬囧埌鍧戝埆鎱岋紝绋嬪簭鍛樻垚闀胯矾涓娾€斺€旇俯鐨勬瘡涓€涓潙閮芥槸鏈潵鐨勯槻璺岀绫嶏紒馃挭锛堝畬锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载