คำถามติดแท็ก reflection

Reflection เป็นความสามารถของโปรแกรมในการสังเกตและ / หรือปรับเปลี่ยนโครงสร้างและ / หรือพฤติกรรมของมันที่รันไทม์ การสะท้อนแสงขึ้นอยู่กับภาษาการเขียนโปรแกรมที่สนับสนุน - โปรดติดแท็กภาษาการเขียนโปรแกรมที่ใช้เมื่อใช้แท็กนี้

7
มีวิธีใดบ้างที่จะเรียกใช้วิธีการส่วนตัว
ฉันมีคลาสที่ใช้ XML และการสะท้อนเพื่อส่งคืนObjects ไปยังคลาสอื่น โดยปกติวัตถุเหล่านี้เป็นฟิลด์ย่อยของวัตถุภายนอก แต่บางครั้งมันเป็นสิ่งที่ฉันต้องการสร้างได้ทันที ฉันลองอะไรแบบนี้ แต่ก็ไม่มีประโยชน์ ฉันเชื่อว่าเป็นเพราะ Java ไม่อนุญาตให้คุณเข้าถึงprivateวิธีการไตร่ตรอง Element node = outerNode.item(0); String methodName = node.getAttribute("method"); String objectName = node.getAttribute("object"); if ("SomeObject".equals(objectName)) object = someObject; else object = this; method = object.getClass().getMethod(methodName, (Class[]) null); หากวิธีการที่ให้มันล้มเหลวด้วยprivate NoSuchMethodExceptionฉันสามารถแก้มันได้โดยการทำวิธีpublicหรือทำให้คลาสอื่นได้มาจาก เรื่องสั้นสั้นฉันแค่สงสัยว่ามีวิธีการเข้าถึงprivateวิธีการสะท้อน
146 java  reflection  private 


18
รับชนิดของพารามิเตอร์ทั่วไปใน Java พร้อมการสะท้อน
เป็นไปได้ที่จะรับชนิดของพารามิเตอร์ทั่วไปหรือไม่? ตัวอย่าง: public final class Voodoo { public static void chill(List<?> aListWithTypeSpiderMan) { // Here I'd like to get the Class-Object 'SpiderMan' Class typeOfTheList = ???; } public static void main(String... args) { chill(new ArrayList<SpiderMan>()); } }

8
Java Reflection: วิธีรับชื่อของตัวแปร?
การใช้ Java Reflection เป็นไปได้หรือไม่ที่จะได้รับชื่อตัวแปรภายในเครื่อง? ตัวอย่างเช่นถ้าฉันมีสิ่งนี้: Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo(); เป็นไปได้หรือไม่ที่จะใช้เมธอดที่สามารถค้นหาชื่อของตัวแปรเหล่านั้นได้เช่น: public void baz(Foo... foos) { for (Foo foo: foos) { // Print the name of each foo - b, a, and r System.out.println(***); } } แก้ไข: คำถามนี้แตกต่างจากมีวิธีใน Java เพื่อค้นหาชื่อของตัวแปรที่ถูกส่งผ่านไปยังฟังก์ชั่นหรือไม่? …
139 java  reflection 

5
การทดสอบว่าวัตถุเป็นประเภททั่วไปใน C # หรือไม่
ฉันต้องการทำการทดสอบว่าวัตถุเป็นประเภททั่วไปหรือไม่ ฉันได้ลองทำสิ่งต่อไปนี้แล้วไม่ประสบความสำเร็จ: public bool Test() { List<int> list = new List<int>(); return list.GetType() == typeof(List<>); } ฉันทำอะไรผิดและฉันจะทำการทดสอบนี้ได้อย่างไร?
139 c#  .net  generics  reflection  types 


8
การสะท้อนทั่วไปรับค่าฟิลด์
ฉันพยายามรับค่าฟิลด์ผ่านการสะท้อน ปัญหาคือฉันไม่ทราบประเภทช่องและต้องตัดสินใจขณะรับค่า รหัสนี้มีผลกับข้อยกเว้นนี้: ไม่สามารถตั้งค่า java.lang.String field com .... fieldName เป็น java.lang.String Field field = object.getClass().getDeclaredField(fieldName); field.setAccessible(true); Class<?> targetType = field.getType(); Object objectValue = targetType.newInstance(); Object value = field.get(objectValue); ฉันพยายามแคสต์ แต่พบข้อผิดพลาดในการคอมไพล์: field.get((targetType)objectValue) หรือ targetType objectValue = targetType.newInstance(); ฉันจะทำเช่นนี้ได้อย่างไร?
132 java  reflection 

4
ฉันจะสะท้อนถึงสมาชิกของวัตถุไดนามิกได้อย่างไร
ฉันต้องการพจนานุกรมคุณสมบัติและค่าจากวัตถุที่ประกาศด้วยคีย์เวิร์ดไดนามิกใน. NET 4 หรือไม่ ดูเหมือนว่าการใช้การสะท้อนกลับจะไม่ได้ผล ตัวอย่าง: dynamic s = new ExpandoObject(); s.Path = "/Home"; s.Name = "Home"; // How do I enumerate the Path and Name properties and get their values? IDictionary<string, object> propertyValues = ???
131 c#  dynamic  reflection 

14
การดึงชื่อ / ค่าของแอตทริบิวต์ที่สืบทอดมาโดยใช้ Java Reflection
ฉันเป็นวัตถุ Java 'ChildObj' ซึ่งขยายจาก 'ParentObj' ตอนนี้ถ้าเป็นไปได้ที่จะดึงชื่อคุณลักษณะและค่าทั้งหมดของ ChildObj รวมถึงคุณลักษณะที่สืบทอดมาด้วยโดยใช้กลไกการสะท้อน Java? Class.getFieldsให้อาเรย์ของคุณลักษณะสาธารณะและClass.getDeclaredFieldsมอบอาเรย์ของฟิลด์ทั้งหมดให้ฉัน แต่ไม่มีรายการใดรวมถึงรายการฟิลด์ที่สืบทอด มีวิธีใดที่จะดึงข้อมูลคุณลักษณะที่สืบทอดมาด้วยหรือไม่

3
คลาส Objective-C -> สตริงที่ต้องการ: [NSArray className] -> @“ NSArray”
ฉันพยายามรับชื่อสตริงของคลาสจากอ็อบเจกต์คลาสเอง // For instance [NSArray className]; // @"NSArray" ฉันได้พบobject_getClassName(id obj)แต่ที่ต้องมีอินสแตนซ์ถูกส่งผ่านไปและในกรณีของฉันที่ไม่จำเป็นต้องทำงาน ดังนั้นฉันจะได้รับสตริงจากวัตถุคลาสได้อย่างไรไม่ใช่ตัวอย่าง?

4
วิธีที่ดีที่สุดในการเรียกร้องความสนใจโดยการไตร่ตรอง
ฉันต้องการรับค่าของฟิลด์ที่มีคำอธิบายประกอบเฉพาะดังนั้นด้วยการสะท้อนฉันจึงได้รับ Field Object นี้ ปัญหาคือฟิลด์นี้จะเป็นแบบส่วนตัวเสมอแม้ว่าฉันจะรู้ล่วงหน้าว่ามันจะมีวิธี getter เสมอ ฉันรู้ว่าฉันสามารถใช้ setAccesible (true) และรับค่าของมันได้ (เมื่อไม่มี PermissionManager) แม้ว่าฉันจะชอบเรียกใช้เมธอด getter ก็ตาม ฉันรู้ว่าฉันสามารถค้นหาเมธอดได้โดยค้นหา "get + fieldName" (แม้ว่าฉันจะรู้ว่าบางครั้งฟิลด์บูลีนจะถูกตั้งชื่อเป็น "is + fieldName") ฉันสงสัยว่ามีวิธีที่ดีกว่าในการเรียกใช้ getter นี้หรือไม่ (เฟรมเวิร์กจำนวนมากใช้ getters / setters เพื่อเข้าถึงแอตทริบิวต์ดังนั้นอาจใช้วิธีอื่น) ขอบคุณ
127 java  reflection  getter 

5
เป็นไปได้ไหมที่จะตั้งค่าคุณสมบัติส่วนตัวผ่านการสะท้อน?
ฉันสามารถตั้งค่าคุณสมบัติส่วนตัวผ่านการสะท้อนแสงได้หรือไม่? public abstract class Entity { private int _id; private DateTime? _createdOn; public virtual T Id { get { return _id; } private set { ChangePropertyAndNotify(ref _id, value, x => Id); } } public virtual DateTime? CreatedOn { get { return _createdOn; } private set { ChangePropertyAndNotify(ref _createdOn, value, x …

14
ฉันสามารถรับชื่อพารามิเตอร์เมธอดโดยใช้การสะท้อนของ Java ได้หรือไม่
ถ้าฉันมีชั้นเรียนเช่นนี้: public class Whatever { public void aMethod(int aParam); } จะมีวิธีใดที่จะรู้ว่าaMethodใช้พารามิเตอร์การตั้งชื่อaParamที่เป็นประเภทint?
124 java  reflection 


5
เหตุใดนิพจน์ C # แลมบ์ดาบางตัวจึงรวบรวมวิธีการคง
ดังที่คุณเห็นในโค้ดด้านล่างฉันได้ประกาศให้Action<>ออบเจ็กต์เป็นตัวแปร ใครช่วยแจ้งให้เราทราบได้ไหมว่าทำไมตัวแทนวิธีการดำเนินการนี้จึงทำงานเหมือนวิธีการคงที่ เหตุใดจึงส่งคืนtrueในรหัสต่อไปนี้ รหัส: public static void Main(string[] args) { Action<string> actionMethod = s => { Console.WriteLine("My Name is " + s); }; Console.WriteLine(actionMethod.Method.IsStatic); Console.Read(); } เอาท์พุท:
122 c#  .net  reflection  lambda 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.