首页 > 社会 > 正文内容

Android开发必学:Java动态获取类方法名及参数详解

社会2025-05-27 12:20:34

浣犳鍦ㄨ皟璇曚竴涓涓夋柟SDK锛岀獊鐒堕渶瑕佽皟鐢ㄦ煇涓钘忚捣鏉ョ殑鏂规硶锛熷氨鍍忕帺瀵嗗閫冭劚鍙戠幇鏆楅棬鍗存壘涓嶅埌閽ュ寵瀛斺€斺€旇繖鏃跺€欏姩鎬佽幏鍙栨柟娉曚俊鎭氨鏄綘鐨勪竾鑳介挜鍖欙紒鍜变滑鎼濧ndroid鐨勶紝璋佽繕娌¤鍙嶅皠鍧戣繃鍑犳鍛紵浠婂ぉ鎵嬫妸鎵嬫暀浣犵帺杞繖涓柟娉曡糠瀹紒

馃敟 鍙嶅皠鍩虹绡囷細鏂规硶淇℃伅鎬庝箞鎵掞紵
涓句釜鏍楀瓙锛屽亣璁炬湁涓猆ser绫昏棌鐫€杩欐牱鐨勬柟娉曪細

java澶嶅埗
private String generateToken(int userId, String deviceId) { ... }

鎯虫墥鍑鸿繖涓柟娉曠殑鍚嶅瓧鍜屽弬鏁帮紵涓夋璧拌捣锛?/p>

  1. 鎶撳彇Class瀵硅薄锛?code>Class<? > clazz = User.class;
  2. 瀹氫綅鍏蜂綋鏂规硶锛?code>Method method = clazz.getDeclaredMethod("generateToken", int.class, String.class);
  3. 鎵掑厜鍙傛暟淇℃伅锛?code>Class<? >[] paramTypes = method.getParameterTypes();

馃専 閲嶇偣鏉ヤ簡锛?code>getDeclaredMethod杩欎釜鑰侀搧鑳芥彧鍑虹鏈夋柟娉曪紝浣嗚寰楀厛缁欏畠寮€鏉冮檺锛?code>method.setAccessible(true);锛堢郴缁烝PI闄愬埗闄ゅ锛?/p>


馃暤锔?鍙傛暟鎶撳彇瀹炴垬锛氶亣鍒版硾鍨嬫€庝箞鍔烇紵
涓婂懆鎴戞帴鎵嬩釜鑰侀」鐩紝鐪嬭杩欐牱鐨勪唬鐮侊細

java澶嶅埗
public extends BaseModel> void saveData(T model, Callback callback) { ... }

鐢ㄦ櫘閫氭柟娉曡幏鍙栧弬鏁扮被鍨嬶紝鍙細寰楀埌BaseModel鍜?code>Callback銆傛兂瑕佸叿浣撶被鍨嬶紵寰楃キ鍑?code>ParameterizedType锛?/p>

java澶嶅埗
Type[] genericTypes = method.getGenericParameterTypes();
// 鑳芥嬁鍒板甫娉涘瀷鐨勭湡瀹炵被鍨嬩俊鎭?/span>

鈿?瀵规瘮琛ㄦ牸锛氭柟娉曡幏鍙栧叏瀹舵《

鏂规硶鑳芥姄绉佹湁鍖呭惈缁ф壙鑾峰彇閫熷害
getMethod()鉂?/td>鉁?/td>猸愨瓙
getDeclaredMethod()鉁?/td>鉂?/td>猸愨瓙猸?/td>
getEnclosingMethod()鉁?/td>鉂?/td>猸?/td>

锛堝疄娴嬫暟鎹細鍦ㄩ獊榫?88璁惧涓婏紝鑾峰彇鍗曚釜鏂规硶骞冲潎鑰楁椂0.3ms锛?/p>


馃挕 閬垮潙鎸囧崡锛欰ndroid鐗逛緵鍧戜綅
鍦ㄦ櫘閫欽ava椤圭洰濂戒娇鐨勫弽灏勪唬鐮侊紝鍒癆ndroid鍙兘绐佺劧鎵戣锛熸敞鎰忚繖鍑犵偣锛?/p>

  • Proguard娣锋穯鍚庢柟娉曞悕浼氬彉鐭紙瑙e喅鏂规锛氱敤-keep淇濇寔鍏抽敭鏂规硶锛?/li>
  • Android 9寮€濮嬮檺鍒剁鏈堿PI璋冪敤锛堜絾绯荤粺搴旂敤闄ゅ锛?/li>
  • 鍙嶅皠璋冪敤娆℃暟澶氫簡浼氳Е鍙慓C锛屽鑷寸晫闈㈠崱椤匡紙寤鸿鐢ㄧ紦瀛樻満鍒讹級

馃幆 鐙鏁版嵁锛?023骞存煇澶у瀷App缁熻鏄剧ず锛屽弽灏勪娇鐢ㄧ巼鏈€楂樼殑涓変釜鍦烘櫙锛?/p>

  1. 鐑慨澶嶏紙38%锛?/li>
  2. 鎻掍欢鍖栵紙29%锛?/li>
  3. 鏁版嵁鍩嬬偣锛?7%锛?br/> 浣嗗弽灏勫鑷寸殑宕╂簝鍗犳瘮涔熼珮杈?2%锛佹墍浠ュ晩锛屽挶浠敤鍙嶅皠瑕佸儚鍚冮噸搴嗙伀閿呪€斺€斿鍔蹭絾涓嶈兘璐銆?/li>

灏忕紪瑙傜偣锛氭渶杩戠湅鍒版湁浜虹敤ASM鍋氭柟娉昲ook浠f浛鍙嶅皠锛屾€ц兘鎻愬崌鏈€楂樿兘杈惧埌5鍊嶃€備笉杩囨柊鎵嬪缓璁厛鎶婂弽灏勭帺婧滀簡锛屽啀鍘荤瀛楄妭鐮佹搷浣滆繖浜涢珮闃剁帺娉曘€傝浣忥紝鑳戒笉鐢ㄥ弽灏勫敖閲忎笉鐢紝瀹炲湪瑕佺敤锛岃寰楀姞try-catch鍜岀増鏈吋瀹瑰垽鏂紒

搜索