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

การสะท้อนกลับเป็นความสามารถของโปรแกรมคอมพิวเตอร์ในการตรวจสอบไตร่ตรองและปรับเปลี่ยนโครงสร้างและพฤติกรรมของตัวเองในขณะรันไทม์

4
เหตุใดจึงเป็นความคิดที่ไม่ดีที่จะสร้าง setter ทั่วไปและทะเยอทะยานด้วยการสะท้อน?
ในขณะที่หลังฉันเขียนคำตอบสำหรับคำถามเกี่ยวกับวิธีการหลีกเลี่ยงการทะเยอทะยานและ setter สำหรับทุกตัวแปรที่ไม่แน่นอน ในเวลานั้นฉันมีเพียงความกล้าหาญที่จะพูดด้วยความรู้สึกว่านี่เป็นความคิดที่ไม่ดี แต่ OP ได้ถามอย่างชัดเจนว่าจะทำอย่างไร ฉันค้นหาที่นี่ว่าเพราะเหตุใดปัญหานี้จึงอาจเป็นปัญหาและพบคำถามนี้ซึ่งคำตอบดูเหมือนจะเป็นคำตอบโดยใช้การไตร่ตรองเว้นแต่ว่าจำเป็นจริงๆคือการปฏิบัติที่ไม่ดี ดังนั้นใครบางคนสามารถพูดด้วยวาจาว่าทำไมมันจึงเป็นสิ่งที่สะท้อนให้เห็นว่าควรหลีกเลี่ยงโดยเฉพาะในกรณีของผู้ทะเยอทะยานทั่วไปและผู้ตั้งค่า?
49 java  reflection 

6
เหตุใดฉันจึงควรใช้การสะท้อน
ฉันใหม่กับ Java; จากการศึกษาของฉันฉันอ่านว่าการสะท้อนนั้นใช้เพื่อเรียกชั้นเรียนและวิธีการต่างๆ ฉันควรใช้การสะท้อนเมื่อใดและอะไรคือความแตกต่างระหว่างการใช้การสะท้อนกับวัตถุที่สร้างอินสแตนซ์และวิธีการโทรในแบบดั้งเดิม
29 java  reflection 

5
ตัวดำเนินการอินสแตนซ์ Java ของการพิจารณาการสะท้อนและสิ่งที่กำหนดสะท้อน?
ฉันได้พูดคุยกับเพื่อนร่วมงานในวันนี้ไม่ว่าการใช้งานตัวดำเนินการ Java instanceofนั้นเป็นสิ่งที่สะท้อนออกมาหรือไม่ และการอภิปรายพัฒนาอย่างรวดเร็วในสิ่งที่กำหนดสะท้อน ดังนั้นคำจำกัดความของการสะท้อนคืออะไร? และการใช้งานของการinstanceofพิจารณา "ใช้การสะท้อน" คืออะไร? และนอกจากนี้หากinstanceofพิจารณาว่าเป็นเงาสะท้อนแล้วความหลากหลายนั้นก็ไม่ "ใช้การสะท้อน" เช่นกัน? ถ้าไม่ต่างกันคืออะไร

3
การสะท้อนกลับ: การใช้การสะท้อนยังคง“ ไม่ดี” หรือ“ ช้า” หรือไม่? มีการเปลี่ยนแปลงอะไรกับการสะท้อนตั้งแต่ปี 2545
ฉันสังเกตเห็นเมื่อต้องรับมือกับนิพจน์หรือต้นไม้นิพจน์ฉันใช้การสะท้อนจำนวนมากเพื่อกำหนดและรับค่าในคุณสมบัติและสิ่งที่มีคุณ มันเกิดขึ้นกับฉันว่าการใช้การสะท้อนนั้นดูเหมือนจะเป็นเรื่องธรรมดามากขึ้นเรื่อย ๆ สิ่งต่าง ๆ เช่น DataAnotations สำหรับการตรวจสอบความถูกต้องของ ORM ที่หนักหน่วงเป็นต้นฉันสงสัยว่า: มีการเปลี่ยนแปลงอะไรบ้างนับตั้งแต่วันหลายปีที่ผ่านมาเมื่อฉันเคยถูกบอกให้หลีกเลี่ยงการสะท้อนถ้าเป็นไปได้? ถ้าหากมีอะไรเปลี่ยนแปลง มันเป็นเพียงความเร็วของเครื่องหรือไม่? มีการเปลี่ยนแปลงเฟรมเวิร์กเพื่อเร่งการสะท้อนหรือไม่? หรือไม่มีอะไรเปลี่ยนแปลงจริง ๆ ? มันยังคง "แย่" หรือ "ช้า" เพื่อใช้การสะท้อน?
21 .net  reflection 

6
มันเป็นนิสัยที่ไม่ดีที่จะใช้การสะท้อน (มากกว่า) หรือไม่?
เป็นวิธีปฏิบัติที่ดีหรือไม่หากใช้การสะท้อนกลับหากลดจำนวนรหัสสำเร็จรูปลงอย่างมาก? โดยทั่วไปจะมีการแลกเปลี่ยนระหว่างประสิทธิภาพและความสามารถในการอ่านในด้านหนึ่งและสิ่งที่เป็นนามธรรม / ระบบอัตโนมัติ / การลดรหัสสำเร็จรูปในอีกด้านหนึ่ง แก้ไข: นี่คือตัวอย่างของการใช้การสะท้อนที่แนะนำ เพื่อให้ตัวอย่างเช่นสมมติว่ามีระดับนามธรรมBaseซึ่งมี 10 สาขาและมี 3 subclasses SubclassA, SubclassBและSubclassCแต่ละคนมี 10 สาขาที่แตกต่างกัน พวกเขาทั้งหมดถั่วง่าย ๆ ปัญหาคือคุณได้รับBaseการอ้างอิงสองประเภทและคุณต้องการดูว่าวัตถุที่เกี่ยวข้องนั้นเป็นประเภทเดียวกัน (ย่อย) และเท่ากันหรือไม่ เนื่องจากโซลูชันมีโซลูชันแบบดิบที่คุณตรวจสอบก่อนว่าประเภทเท่ากันหรือไม่จากนั้นตรวจสอบฟิลด์ทั้งหมดหรือคุณสามารถใช้การสะท้อนและดูแบบไดนามิกว่าเป็นประเภทเดียวกันและวนซ้ำทุกวิธีที่ขึ้นต้นด้วย "รับ" (ระเบียบ การกำหนดค่ามากกว่า) เรียกพวกเขาทั้งสองวัตถุและโทรเท่ากับผล boolean compare(Base base1, Base, base2) { if (base1 instanceof SubclassA && base2 instanceof SubclassA) { SubclassA subclassA1 = (SubclassA) base1; SubclassA subclassA2 = …

6
การสะท้อนกลับเสียเปรียบเนื่องจากไม่สามารถ จำกัด ตัวแปรส่วนตัวได้หรือไม่?
โมดิprivateฟายเออร์ใช้เพื่อ จำกัด การเข้าถึงภายนอกคลาส แต่การใช้การสะท้อนคลาสอื่น ๆ สามารถเข้าถึงเมธอดและฟิลด์ส่วนบุคคลได้ ดังนั้นฉันจึงสงสัยว่าเราจะ จำกัด การเข้าถึงได้อย่างไรถ้ามันเป็นส่วนหนึ่งของข้อกำหนด

1
ความสัมพันธ์ระหว่างล่ามเมตาวงกลมเครื่องเสมือนและประสิทธิภาพที่เพิ่มขึ้นคืออะไร
ฉันได้อ่านเกี่ยวกับล่ามเมตาวงกลมบนเว็บ (รวมถึง SICP) และฉันได้ตรวจสอบโค้ดของการใช้งานบางอย่าง (เช่น PyPy และ Narcissus) ฉันได้อ่านเกี่ยวกับสองภาษาค่อนข้างมากซึ่งใช้ประโยชน์จากการประเมิน metacircular, Lisp และ Smalltalk เท่าที่ฉันเข้าใจ Lisp เป็นคอมไพเลอร์โฮสติ้งด้วยตนเองเป็นครั้งแรกและ Smalltalk มีการใช้งาน JIT "จริง" เป็นครั้งแรก สิ่งหนึ่งที่ฉันไม่เข้าใจอย่างสมบูรณ์คือล่าม / คอมไพเลอร์เหล่านั้นจะบรรลุผลการปฏิบัติงานที่ดีได้อย่างไรหรือกล่าวอีกนัยหนึ่งทำไม PyPy จึงเร็วกว่า CPython มันเป็นเพราะการสะท้อน? และจากการวิจัย Smalltalk ของฉันทำให้ฉันเชื่อว่ามีความสัมพันธ์ระหว่าง JIT เครื่องเสมือนและการไตร่ตรอง เครื่องเสมือนเช่น JVM และ CLR อนุญาตการวิพากษ์วิจารณ์ประเภทจำนวนมากและฉันเชื่อว่าพวกเขาใช้งานได้อย่างยอดเยี่ยมในการรวบรวม Just-in-Time (และ AOT ฉันคิดว่า?) แต่เท่าที่ฉันรู้ Virtual Machines นั้นเป็นซีพียูที่พวกเขามีชุดคำสั่งพื้นฐาน Virtual Machines นั้นมีประสิทธิภาพหรือไม่เนื่องจากประกอบด้วยข้อมูลประเภทและข้อมูลอ้างอิง ฉันถามสิ่งนี้เพราะหลายภาษาที่แปลและเรียบเรียงได้ใช้ …

3
ฉันจำเป็นต้องจัดการกับสถานการณ์ที่วิธีการส่วนตัวถูกเรียกผ่านการสะท้อนกลับหรือไม่?
เมื่อมีการสร้างห้องสมุดที่ผมต้องให้แน่ใจว่าวิธีการที่ภาคเอกชนจะต้องทำงานตามที่คาดไว้เมื่อเรียกไม่ได้โดยวิธีการอื่น ๆ ของชั้นเดียวกัน แต่โดยห้องสมุดอื่นผ่านการสะท้อน ? ตัวอย่างเช่นหากวิธีส่วนตัวprivate DoSomething(int number)คาดว่า: number เป็นจำนวนเต็มบวกที่ไม่เป็นศูนย์และ: ตัวแปรส่วนตัวstring abcไม่ใช่โมฆะและไม่ใช่สตริงว่าง และสมบูรณ์ล้มเหลวอย่างน่าเกลียดหากทั้งสองเงื่อนไขไม่ตรงกันฉันต้องจัดการกับความล้มเหลวเหล่านั้นแม้ว่าฉันจะรู้ว่าวิธีการทั้งหมดในชั้นเรียนจะกำหนดค่าที่ไม่ว่างเปล่าให้กับการabcโทรก่อนDoSomethingและส่งจำนวนเต็มบวกที่ไม่เป็นศูนย์ให้ วิธี? กล่าวอีกนัยหนึ่งคือรหัสที่ไม่ได้ป้องกันการโทรที่ไม่ปลอดภัยผ่านการสะท้อนอาจถือได้ว่าเป็นรหัสที่มีคุณภาพต่ำหรือเป็นของผู้โทรที่ใช้การสะท้อนเพื่อให้แน่ใจว่าการโทรจะไม่ทำลายอะไรเลย หมายเหตุ: คำถามของฉันครอบคลุมเฉพาะชุดไลบรารีมาตรฐาน นี่ไม่ครอบคลุมรหัสที่จะต้องมีความปลอดภัยสูง (เช่นเมื่อใครบางคนอาจสนใจโดยใช้การสะท้อนเพื่อให้มันทำงานโดยไม่คาดคิดหรือผิดพลาด) ¹เนื่องจากชั้นเรียนได้รับการบันทึกอย่างถูกต้องเนื่องจากมีการทดสอบหน่วยมากพอที่จะตรวจสอบให้แน่ใจว่าผู้พัฒนารายอื่นจะไม่ทำลายวิธีนี้เป็นต้น

4
วิธีที่ดีที่สุดในการทำเครื่องหมายวิธีการที่เรียกว่าผ่านการสะท้อน?
ซอฟต์แวร์ของเรามีหลายคลาสที่ควรพบแบบไดนามิกผ่านการสะท้อนกลับ คลาสทั้งหมดมีคอนสตรัคเตอร์ที่มีลายเซ็นเฉพาะซึ่งรหัสการสะท้อนจะทำให้วัตถุเป็นอินสแตนซ์ อย่างไรก็ตามเมื่อมีคนตรวจสอบว่ามีการอ้างอิงวิธีการนั้นหรือไม่ (เช่นผ่าน Visual Studio Code Lens) การอ้างอิงผ่านการสะท้อนกลับจะไม่ถูกนับ ผู้คนสามารถพลาดการอ้างอิงและลบ (หรือเปลี่ยน) วิธีที่ไม่ได้ใช้อย่างเห็นได้ชัด เราควรทำเครื่องหมาย / วิธีการเอกสารที่ต้องการเรียกผ่านการสะท้อนอย่างไร เป็นการดีที่ควรทำเครื่องหมายวิธีในลักษณะที่ทั้งเพื่อนร่วมงานและ Visual Studio / Roslyn และเครื่องมืออัตโนมัติอื่น ๆ 'ดู' ว่าวิธีการมีวัตถุประสงค์ที่จะเรียกว่าผ่านการสะท้อน ฉันรู้ว่ามีสองตัวเลือกที่เราสามารถใช้ได้ แต่ทั้งคู่ไม่ค่อยพอใจ เนื่องจาก Visual Studio ไม่พบการอ้างอิง: ใช้แอตทริบิวต์ที่กำหนดเองและทำเครื่องหมายตัวสร้างด้วยคุณลักษณะนี้ ปัญหาคือคุณสมบัติของแอททริบิวไม่สามารถเป็นการอ้างอิงเมธอดได้ดังนั้นตัวสร้างจะยังคงแสดงว่ามีการอ้างอิง 0 รายการ เพื่อนร่วมงานที่ไม่คุ้นเคยกับแอตทริบิวต์ที่กำหนดเองอาจจะเพิกเฉย ข้อดีของวิธีการปัจจุบันของฉันคือส่วนการสะท้อนสามารถใช้คุณลักษณะเพื่อค้นหาตัวสร้างที่ควรเรียกใช้ ใช้ความคิดเห็นเพื่อจัดทำเอกสารว่าเมธอด / คอนสตรัคเตอร์ตั้งใจที่จะเรียกผ่านการสะท้อนกลับ เครื่องมืออัตโนมัติไม่สนใจความคิดเห็น (และเพื่อนร่วมงานก็ทำได้เช่นกัน) ความคิดเห็นเกี่ยวกับเอกสาร XMLสามารถนำมาใช้เพื่อให้ Visual Studio นับการอ้างอิงเพิ่มเติมถึงวิธีการ / คอนสตรัคเตอร์: อนุญาตให้MyPluginคลาสที่ตัวสร้างเรียกใช้ผ่านการสะท้อนกลับ สมมติว่าโค้ดการสะท้อนที่กล่าวอ้างค้นหาคอนสตรัคเตอร์ที่รับintพารามิเตอร์ …

3
วิธีการออกแบบโปรแกรม C ++ เพื่ออนุญาตให้นำเข้าฟังก์ชั่นรันไทม์?
วันนี้ฉันอยากถามคุณเกี่ยวกับความสามารถของ C ++ ในการตระหนักถึงสถาปัตยกรรมซอฟต์แวร์เฉพาะ แน่นอนฉันใช้การค้นหา แต่ไม่พบคำตอบที่เชื่อมโยงโดยตรง โดยพื้นฐานแล้วเป้าหมายของฉันคือการสร้างโปรแกรมที่อนุญาตให้ผู้ใช้สร้างแบบจำลองและจำลองระบบทางกายภาพที่ประกอบขึ้นโดยพลการเช่นรถขับ ฉันคิดว่ามีไลบรารี่ของโมเดลทางกายภาพ (ฟังก์ชั่นภายในคลาส) แต่ละฟังก์ชั่นอาจมีอินพุตบางส่วนและส่งคืนเอาต์พุตบางอย่างขึ้นอยู่กับคำอธิบายทางกายภาพเช่นโมเดลเครื่องยนต์เผาไหม้รุ่นลากอากาศพลศาสตร์แบบจำลองล้อเป็นต้น ตอนนี้ความคิดคือการจัดเตรียมเฟรมเวิร์กให้กับผู้ใช้ซึ่งช่วยให้เขาสามารถเขียนฟังก์ชั่นใด ๆ ตามความต้องการของเขาเช่นเพื่อแมปพฤติกรรมทางกายภาพใด ๆ เฟรมเวิร์กควรจัดเตรียมฟังก์ชันการทำงานเพื่อเชื่อมต่อเอาต์พุตและอินพุตของฟังก์ชันที่แตกต่างกัน ดังนั้นกรอบงานให้คลาสคอนเทนเนอร์ ฉันเรียกมันว่า COMPONENT ซึ่งสามารถเก็บวัตถุโมเดลหนึ่งหรือหลายอันได้ (ฟังก์ชั่น) คอนเทนเนอร์เหล่านี้ยังสามารถเก็บส่วนประกอบอื่น ๆ (รูปแบบคอมโพสิต) รวมถึงการเชื่อมต่อ (CONNECTOR) ระหว่างพารามิเตอร์ฟังก์ชัน นอกจากนี้คลาสคอมโพเนนต์ยังมีฟังก์ชันตัวเลขทั่วไปเช่นตัวแก้ปัญหาคณิตศาสตร์และอื่น ๆ องค์ประกอบของฟังก์ชั่นควรจะทำในช่วงรันไทม์ ในตัวอย่างแรกผู้ใช้ควรจะสามารถตั้งค่าการแต่งเพลงผ่านการนำเข้า XML ซึ่งกำหนดโครงสร้างองค์ประกอบ หลังจากนั้นหนึ่งอาจคิดเพิ่ม GUI เพื่อให้คุณเข้าใจมากขึ้นนี่เป็นตัวอย่างที่ง่ายมาก: <COMPONENT name="Main"> <COMPONENT name="A"> <FUNCTION name="A1" path="lib/functionA1" /> </COMPONENT> <COMPONENT name="B"> <FUNCTION name="B1" path="lib/functionB1" /> …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.