รับวิธีการในชั้นเรียน:
วิธีการสาธารณะ [] getMethods (); // รับวิธีการสาธารณะทั้งหมดรวมถึงตัวเองและการสืบทอด (การใช้งาน) - วิธีการไม่สนับสนุนยาสามัญ <> นั่นคือไม่มี <> ตามมา
วิธีการสาธารณะ [] getDeclaredMethods (); // รับทุกวิธี (ส่วนตัว, สาธารณะ, ได้รับการปกป้องไม่มีส่วนเกี่ยวข้องกับสิทธิ์ในการเข้าถึง) ไม่รวมถึงวิธีการที่สืบทอดมาซึ่งสามารถรับแอตทริบิวต์ส่วนตัวได้โดยตรงหลังจาก JDK1.8 ไม่จำเป็นต้องตั้งค่าการอนุญาต แต่มีเพียงวิธี getDeclaredMethod เท่านั้นที่ยังต้องตั้งค่าการอนุญาตสำหรับวิธีการ
วิธีการสาธารณะ [] getMethod (String MethodName, Class <t> ... ParameterTypes); // หมายถึงการได้รับวิธีสาธารณะที่ระบุรวมถึงพารามิเตอร์ที่สืบทอดมา: MethodName: หมายถึงชื่อของวิธีการที่ได้รับ
ParameterTypes: ประเภทคลาสแสดงถึงพารามิเตอร์ของวิธีการดึง
วิธีการสาธารณะ [] getDeclaredMethod (String MethodName, Class <t> ... ParameterTypes); // หมายถึงการได้รับวิธีการที่ระบุในชั้นเรียนนี้ (ส่วนตัว, ป้องกัน, สาธารณะ, ไม่เกี่ยวข้องกับการอนุญาตการเข้าถึง) และไม่รวมวิธีการที่สืบทอดมา
class clazz = คนใหม่ (). getClass (); ลอง {// เรียกเมธอดที่ระบุ/*@suppresswarnings ("ไม่ได้ตรวจสอบ") เมธอด me = clazz.getDeclaredMethod ("getName", string.class); me.invoke (clazz.newinstance (), "จาง"); */// รับวิธีการทั้งหมด [] วิธีการ = clazz.getDeclaredMethods (); สำหรับ (วิธีการ: วิธีการ) {system.out.println (method.getName ()); }} catch (exception e) {e.printstacktrace (); -สำหรับวิธีการเรียกใช้เมธอดที่มีพารามิเตอร์หลายตัว: พารามิเตอร์ thingTypes ตามด้วย getDeclaredMethod สามารถเข้าใจได้ว่าเป็นพารามิเตอร์ที่เป็นทางการของประเภทคลาส โดยการโทร Invoke การกำหนดพารามิเตอร์หลายตัวจะถูกห่อหุ้มด้วยวัตถุใหม่ [] {}
@suppresswarnings ("ไม่ได้ตรวจสอบ") เมธอด = clazz.getDeclaredMethod ("getName", คลาสใหม่ [] {string.class, int.class}); method.invoke (ใหม่ (), วัตถุใหม่ [] {"จาง", 10});เรียกวิธีการคงที่
ผู้ใช้คลาส {โมฆะสาธารณะคงที่ StaticMethod () {System.out.println ("Static Mthod revoke.");}} เช่น: คลาส <user> clz = user.class; เมธอด StaticMethod = clz.getMethod ("StaticMthod"); มีสองวิธีในการเรียกวิธีการคงที่:
1. เนื่องจากวิธีการคงที่เป็นของวัตถุอินสแตนซ์ทั้งหมดคุณสามารถสร้างวัตถุโดยพลการของคลาสและเรียกมันผ่านวัตถุ
StaticMethod.invoke (clz.NewInstance ()); // staticMethod ไม่มีพารามิเตอร์ดังนั้นประเภทรายการพารามิเตอร์จะไม่ถูกกรอก
2. หากวิธีการพื้นฐานเป็นแบบคงที่คุณสามารถเพิกเฉยต่อพารามิเตอร์ OBJ ที่ระบุและตั้งค่าพารามิเตอร์ OBJ เป็น null
StaticMethod.invoke (Null);
เนื้อหาที่เกี่ยวข้องเพิ่มเติม:
หนึ่ง: แนวคิดการไตร่ตรอง
คุณสามารถรับตัวแปรสมาชิกและวิธีการของคลาสที่แน่นอนผ่านชั้นเรียนและเรียกมันว่า
2: รับวิธีการตัวแปรและวิธีการก่อสร้างผ่านการสะท้อนกลับ
@Test // รับวิธีการนิยามคลาสโมฆะสาธารณะ testMethod () พ่นข้อยกเว้น {@SuppressWarnings ("rawtypes") คลาส clazz = class.forname ("java.lang.string"); วิธี [] m = clazz.getDeclaredMethods (); สำหรับ (int i = 0; i <m.length; i ++) {system.out.println (m [i] .getName () + "" + m [i] .getDeclaringClass ()); }} @Test // รับการกำหนดคลาส VOID Public Void TestField () พ่นข้อยกเว้น {@SuppressWarnings ("Rawtypes") clazz clazz = class.forname ("java.lang.string"); ฟิลด์ [] ฟิลด์ = clazz.getfields (); สำหรับ (ฟิลด์ f: ฟิลด์) {system.out.println (f.getName ()); }} @Test // รับตัวสร้างของคำจำกัดความของคลาสผ่านการสะท้อนโมฆะสาธารณะ testConstructor () โยนข้อยกเว้น {@SuppressWarnings ("rawTypes") คลาส clazz = class.forname ("java.lang.string"); @suppresswarnings ("rawtypes") constructor [] cons = clazz.getConstructors (); สำหรับ (@suppresswarnings ("" rawtypes ") constructor c: cons) {system.out.println (c +" " + c.getdeclaringclass ()); -สาม: เรียกวิธีการที่กำหนดโดยคลาสผ่านการสะท้อนกลับ
@Test // เรียกวิธีการที่กำหนดโดยคลาสผ่านการสะท้อนโมฆะสาธารณะ public void testinvokemethod () โยนข้อยกเว้น {class clazz = class.forname ("java.lang.string"); // กำหนดคลาสประเภทพารามิเตอร์ [] params = คลาสใหม่ [1]; params [0] = string.class; วิธี m = clazz.getDeclaredMethod ("indexof", params); // ตั้งค่าวัตถุพารามิเตอร์ [] p = วัตถุใหม่ [1]; P [0] = "E"; จำนวนเต็ม S = (จำนวนเต็ม) M.Invoke ("HelloWorld!", P); System.out.println (s); -