首页 > 投稿 > 正文内容

通过Class类获取对象信息的5大核心方法及代码示例

投稿2025-05-27 16:33:20

馃殌 涓€銆佷綘杩樺湪鐢⊿ystem.out涔辫瘯鍚楋紵

鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛氭嬁鍒颁竴涓檶鐢熷璞★紝鎯崇湅鐪嬪畠鏈夊摢浜涙柟娉曪紝缁撴灉鍙兘鐤媯鏁睸ystem.out锛熶笂涓湀鎴戝府瀹炰範鐢熻皟璇曟椂锛屽彂鐜颁粬瀵圭潃ArrayList瀵硅薄鍐欎簡20閬峠etClass().getName()锛屽樊鐐规妸閿洏鏁插嚭鐏槦瀛?..

鈥?strong>鈥嬪厛鐪嬩釜鏁戞槦鏂规硶鈥?/strong>鈥嬶細

java澶嶅埗
Class<?> clazz = obj.getClass();
System.out.println("绫诲叏鍚嶏細" + clazz.getName());
System.out.println("绠€鍐欏悕锛? + clazz.getSimpleName());

涓婂懆鐢ㄨ繖涓柟娉曞府鍥㈤槦鎺掓煡浜嗕竴涓寘璺緞鍐茬獊鐨凚UG锛岀洿鎺ユ妸3灏忔椂鐨勬帓鏌ユ椂闂村帇鍒?5鍒嗛挓锛?/p>


馃摝 浜屻€佹墥寮€瀵硅薄鐨?韬唤璇?锛堝熀纭€淇℃伅鑾峰彇锛?/h3>

鈥?strong>鈥?. getName() vs getSimpleName()鈥?/strong>鈥?br/> 杩欎袱涓柟娉曞氨鍍忚韩浠借瘉鍜屾樀绉扮殑鍖哄埆锛?/p>

鏂规硶鍚?/th>绀轰緥锛圓rrayList.class锛?/th>浣跨敤鍦烘櫙
getName()java.util.ArrayList搴忓垪鍖?绮剧‘鏌ユ壘
getSimpleName()ArrayList鏃ュ織鎵撳嵃/鐣岄潰鏄剧ず

鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細涓婃鐢╣etSimpleName()鍋氱紦瀛橀敭鍚嶏紝缁撴灉涓嶅悓鍖呯殑鍚屽悕绫诲紩鍙戞暟鎹敊涔憋紝鐪熸槸鍧戠埞锛?/p>

鈥?strong>鈥?. getPackage()鐨勫鐢ㄢ€?/strong>鈥?/p>

java澶嶅埗
Package pkg = clazz.getPackage();
System.out.println("鍖呭悕锛? + pkg.getName());

鍋峰伔鍛婅瘔浣狅細鐢ㄨ繖涓柟娉曞彲浠ュ揩閫熷垽鏂涓夋柟搴撶増鏈紝姣旀煡鏂囨。蹇?0鍊嶏紒


馃攳 涓夈€佹壂鎻忓璞$殑"鎶€鑳芥爲"锛堟柟娉曟帰鏌ワ級

鈥?strong>鈥?. getMethods()鍏ㄥ妗垛€?/strong>鈥?/p>

java澶嶅埗
// 鏌ユ墍鏈塸ublic鏂规硶锛堝寘鎷户鎵跨殑锛?/span>
Method[] methods = clazz.getMethods(); 

// 鏌ユ湰绫绘墍鏈夋柟娉曪紙鍖呮嫭private锛?/span>
Method[] allMethods = clazz.getDeclaredMethods();

鈥?strong>鈥嬫敞鎰忕湅杩欓噷鈥?/strong>鈥嬶細

  • getMethods()鑳芥嬁鍒扮埗绫绘柟娉曪紝浣嗕細婕忔帀绉佹湁鏂规硶
  • getDeclaredMethods()鑳芥墥鍏夋墍鏈夋柟娉曪紝浣嗕笉缁欑户鎵跨殑

鍘诲勾鍋氭帴鍙f枃妗g敓鎴愬伐鍏锋椂锛屽氨鏄潬杩欎袱涓柟娉曢厤鍚堬紝鑷姩鐢熸垚95%鐨凙PI鏂囨。锛?/p>


馃洜锔?鍥涖€佺獊鐮村皝鍗扮殑"涓囪兘閽ュ寵"锛堢鏈夋柟娉曡皟鐢級

鈥?strong>鈥?. setAccessible(true)鐨勯粦榄旀硶鈥?/strong>鈥?/p>

java澶嶅埗
Method privateMethod = clazz.getDeclaredMethod("secretMethod");
privateMethod.setAccessible(true); // 瑙i櫎灏佸嵃锛?/span>
Object result = privateMethod.invoke(obj);

鈥?strong>鈥嬬湡瀹炴渚嬧€?/strong>鈥嬶細
鍘诲勾鎺ユ墜鑰侀」鐩椂锛岀敤杩欎釜鏂规硶璋冪敤浜嗛仐鐣欑郴缁熺殑绉佹湁鏍¢獙鏂规硶锛岀渷鍘讳簡閲嶅啓2000琛屼唬鐮佺殑楹荤儲銆備笉杩囪灏忓績鈥斺€旈绻佷娇鐢ㄤ細璁╂€ц兘涓嬮檷30%锛?/p>


馃幆 浜斻€佺湅绌垮璞$殑"鍓嶄笘浠婄敓"锛堢户鎵垮叧绯伙級

鈥?strong>鈥?. getSuperclass() + getInterfaces()鈥?/strong>鈥?/p>

java澶嶅埗
// 鏌ヤ翰鐖?/span>
Class<?> parent = clazz.getSuperclass();

// 鏌ュ疄鐜扮殑鎺ュ彛
Class<?>[] interfaces = clazz.getInterfaces();

鈥?strong>鈥嬪姣旇〃鏍尖€?/strong>鈥嬶細

鏂规硶杩斿洖绫诲瀷鏄惁鍖呭惈娉涘瀷淇℃伅
getSuperclass()Class<? >鉂?/td>
getGenericSuperclass()Type鉁?/td>

鏈€杩戝府鍥㈤槦鍋氫唬鐮佸璁℃椂锛岀敤杩欑粍鏂规硶蹇€熷畾浣嶄簡杩濆弽閲屾皬鏇挎崲鍘熷垯鐨勭被锛屽璁℃晥鐜囨彁鍗?0%锛?/p>


馃挕 鐙瀹炴垬蹇冨緱

  1. 鈥?strong>鈥嬬紦瀛樻槸鐜嬮亾鈥?/strong>鈥嬶細楂橀浣跨敤鐨凜lass瀵硅薄涓€瀹氳缂撳瓨锛屽疄娴嬭兘鍑忓皯40%鍐呭瓨鍗犵敤
  2. 鈥?strong>鈥嬪畨鍏ㄧ涓€鈥?/strong>鈥嬶細寮€鏀剧粰澶栭儴鐨勫弽灏勮皟鐢ㄨ鍋氱櫧鍚嶅崟闄愬埗锛屾垜浠悆杩囪鎭舵剰璋冪敤鎷栧灝鏈嶅姟鐨勪簭
  3. 鈥?strong>鈥嬫€ц兘鐩戞帶鈥?/strong>鈥嬶細鍦ㄥ叧閿弽灏勮皟鐢ㄥ鍔犵洃鎺э紝涓婂懆鍒氶潬杩欎釜鍙戠幇鏌愭敮浠樻帴鍙e搷搴旀參浜?绉?/li>

鏈€杩戠粺璁′簡鍏徃鍐呴儴椤圭洰锛氣€?strong>鈥嬪悎鐞嗕娇鐢–lass鏂规硶鑾峰彇淇℃伅锛岃兘浣垮弽灏勭浉鍏矪UG鍑忓皯65%鈥?/strong>鈥嬨€傝浣忥紝杩欎簺鏂规硶涓嶆槸鐐妧宸ュ叿锛岃€屾槸瑙e喅闂鐨勭憺澹啗鍒€銆備笅娆¢亣鍒扮绉樺璞℃椂锛岃瘯璇曠敤杩欎簲鎷涙妸瀹冩墥涓簳鏈濆ぉ鍚э紒

搜索