java reflection_simple ตัวอย่างของการเปลี่ยนตัวแปรและวิธีการในส่วนตัว
คลาส demotest {ชื่อสตริงส่วนตัว = "123"; public getName () {system.out.println ("public getName" + ชื่อ); ชื่อคืน; } ส่วนตัว getName2 () {system.out.println ("private getName2" + ชื่อ); ชื่อคืน; -ตัวอย่างเช่นเปลี่ยนค่าของชื่อ วิธีการเปลี่ยนแปลง วิธีการเปลี่ยนแปลงผ่านการสะท้อนชวา
ก่อนอื่นให้ดูวิธีการใช้การสะท้อนเพื่อเรียกใช้วิธี getName
คลาส <demotest> calzz = demotest.class; constructor cons = clazz.getConstructor (คลาสใหม่ [] {}); // นี่คือตัวสร้างเพื่อรับวัตถุคลาส วัตถุของคลาสที่มีการสร้างพารามิเตอร์ ตัวอย่างเช่น: demotest มีวิธีการสร้างโครงสร้างสาธารณะ demotest (String arg0, String arg1) {...... }
ในเวลานี้ Constructor cons = clazz.getConstructor (คลาสใหม่ [] {string.class, string.class}); สตริงสองสายสอดคล้องกับ Arg0 และ Arg1 ตามลำดับ
ถัดไปคือ:
demotest test = (demotest) cons.newinstance (วัตถุใหม่ [] {}); // สร้างวัตถุที่เกี่ยวข้อง พารามิเตอร์วัตถุใหม่ [] {} เป็นค่าเฉพาะของพารามิเตอร์ที่สอดคล้องกับวิธีการก่อสร้าง ดังที่ได้กล่าวไว้ก่อนหน้านี้: demotest test = (demotest) coms.newinstance (วัตถุใหม่ [] {"li che", "จางซาน"}); ต่อไป:
วิธีการ = clazz.getMethod ("getName", คลาสใหม่ [] {string.class}); method.invoke (ทดสอบวัตถุใหม่ [] {"Wang Wu"});ในเวลานี้คุณสามารถพิมพ์ Wu Wu ได้
จากนั้นจะเปลี่ยนค่าชื่อเป็นส่วนตัวได้อย่างไร
1. รับสนามก่อน
ฟิลด์ฟิลด์ = clazz.getDeclaredField ("ชื่อ"); 2. ตั้งค่าสถานะที่เข้าถึงได้ของวัตถุนี้เป็นค่าบูลีนที่ระบุ ค่าของความจริงบ่งชี้ว่าวัตถุที่สะท้อนควรยกเลิกการตรวจสอบการเข้าถึงภาษา Java เมื่อใช้ ค่าของเท็จบ่งชี้ว่าวัตถุที่สะท้อนควรทำการตรวจสอบการเข้าถึงภาษา Java
field.setAccessible (จริง);
3. แก้ไขค่าตัวแปร
field.set ("ชื่อ", "Wang Wu");ตกลง;
เช่นเดียวกับการเข้าถึงวิธีการส่วนตัว
วิธีวิธี = clazz.getDeclaredMethod ("getName2"); method.setAccessible (จริง); method.invoke (ทดสอบวัตถุใหม่ [] {"Wang Wu"});ใช้ getDeclaredFields เพื่อรับสาขาการป้องกันส่วนตัวและสาธารณะ
หากคุณใช้ C.GetFields (); คุณสามารถรับคุณสมบัติของประเภทสาธารณะเท่านั้น
ตัวอย่าง Java Reflection_simple ข้างต้นของการเปลี่ยนตัวแปรและวิธีการในส่วนตัวคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น