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

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

4
การสะท้อน Java - ผลกระทบของ setAccessible (จริง)
ฉันกำลังใช้คำอธิบายประกอบเพื่อกำหนดค่าของเขตข้อมูลในชั้นเรียนแบบไดนามิก เนื่องจากฉันต้องการทำสิ่งนี้ไม่ว่าจะเป็นสาธารณะป้องกันหรือส่วนตัวฉันจึงเรียกsetAccessible(true)วัตถุฟิลด์ทุกครั้งก่อนที่จะเรียกใช้set()เมธอด คำถามของฉันคือการsetAccessible()โทรมีผลกระทบอย่างไรต่อสนาม? setAccessible(true)โดยเฉพาะอย่างยิ่งบอกว่ามันเป็นข้อมูลส่วนตัวและชุดของสายรหัสนี้ หากสถานที่อื่นในรหัสเพื่อดึงฟิลด์เดียวกันผ่านการสะท้อนกลับฟิลด์นั้นจะสามารถเข้าถึงได้หรือไม่? หรือgetDeclaredFields()และgetDeclaredField()วิธีการส่งคืนอินสแตนซ์ใหม่ของวัตถุฟิลด์ทุกครั้งหรือไม่ ฉันเดาอีกวิธีหนึ่งในการระบุคำถามคือถ้าฉันโทรsetAccessible(true)ไปการตั้งค่าให้กลับเป็นค่าเดิมหลังจากทำเสร็จแล้วมีความสำคัญเพียงใด
106 java  reflection 

13
รับประเภท T จาก IEnumerable <T>
มีวิธีดึงข้อมูลประเภทTจากการIEnumerable&lt;T&gt;สะท้อนหรือไม่? เช่น ฉันมีIEnumerable&lt;Child&gt;ข้อมูลตัวแปร ฉันต้องการดึงข้อมูลประเภทของเด็กผ่านการไตร่ตรอง
106 c#  generics  reflection 

19
ตรวจสอบว่าโค้ดทำงานเป็นส่วนหนึ่งของการทดสอบหน่วยหรือไม่
ฉันมีการทดสอบหน่วย (nUnit) หลายชั้นที่เรียกซ้อนกันวิธีการจะล้มเหลวหากทำงานผ่านการทดสอบหน่วย ตามหลักการแล้วคุณจะใช้บางอย่างเช่นการเยาะเย้ยเพื่อตั้งค่าวัตถุที่วิธีนี้ขึ้นอยู่กับ แต่นี่เป็นรหัสของบุคคลที่สามและฉันไม่สามารถทำได้โดยไม่ต้องทำงานมาก ฉันไม่ต้องการตั้งค่าวิธีการเฉพาะ nUnit - ที่นี่มีหลายระดับเกินไปและเป็นวิธีที่ไม่ดีในการทดสอบหน่วย แต่สิ่งที่ฉันต้องการจะทำคือเพิ่มสิ่งนี้ให้ลึกลงไปใน call stack #IF DEBUG // Unit tests only included in debug build if (IsRunningInUnitTest) { // Do some setup to avoid error } #endif มีแนวคิดเกี่ยวกับวิธีการเขียน IsRunningInUnitTest อย่างไร? ปล. ฉันรู้อยู่เต็มอกว่านี่ไม่ใช่การออกแบบที่ยอดเยี่ยม แต่ฉันคิดว่ามันดีกว่าทางเลือกอื่น
105 c#  reflection  nunit 

10
ปัญหาในการรับ AssemblyVersion ในหน้าเว็บโดยใช้ Razor / MVC3
ฉันใช้รหัสต่อไปนี้ในส่วนท้ายในไฟล์ _Layout.cshtml ของฉันเพื่อใส่ข้อมูลเวอร์ชัน AssemblyInfo ลงในส่วนท้ายของทุกหน้าในไซต์ MVC3 ของฉัน อย่างไรก็ตาม: @System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() เพียงพิมพ์ในส่วนท้าย: Revision 0.0.0.0 เมื่อฉันแก้ไขมุมมองเพื่อแสดงข้อมูลแอสเซมบลีทั้งหมดสำหรับ "Executing Assembly" โดยใช้สิ่งต่อไปนี้ @System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString() ซึ่งพิมพ์สิ่งต่อไปนี้: Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null สิ่งนี้แสดงให้เห็นว่า "Executing Assembly" ไม่ใช่แอปหลักของฉัน แต่เป็นมุมมองนั้นเอง ฉันจะรับข้อมูลการประกอบสำหรับแอป ACTUAL ไม่ใช่แค่มุมมองส่วนบุคคลได้อย่างไร

2
จะรับชื่อฟังก์ชันใน Go ได้อย่างไร?
ด้วยฟังก์ชั่นเป็นไปได้ที่จะได้รับชื่อหรือไม่? พูด: func foo() { } func GetFunctionName(i interface{}) string { // ... } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } ฉันได้รับแจ้งว่าruntime FuncForPCจะช่วยได้ แต่ฉันไม่เข้าใจวิธีการใช้งาน

8
ฉันจะรับรายการคอลัมน์ในตารางสำหรับฐานข้อมูล SQLite ได้อย่างไร
ฉันต้องการดึงรายการคอลัมน์ในตาราง ฐานข้อมูลเป็น SQLite รุ่นล่าสุด (3.6 ฉันเชื่อว่า) ฉันกำลังมองหารหัสที่ทำสิ่งนี้กับแบบสอบถาม SQL คะแนนโบนัสพิเศษสำหรับข้อมูลเมตาที่เกี่ยวข้องกับคอลัมน์ (เช่นความยาวประเภทข้อมูล ฯลฯ ... )
103 reflection  sqlite  list 


8
การหลีกเลี่ยงอินสแตนซ์ของ Java
การมีห่วงโซ่ของการดำเนินการ "instanceof" ถือเป็น "กลิ่นรหัส" คำตอบมาตรฐานคือ "ใช้ความหลากหลาย" ฉันจะทำอย่างไรในกรณีนี้? มีคลาสย่อยจำนวนหนึ่งของคลาสพื้นฐาน ไม่มีใครอยู่ภายใต้การควบคุมของฉัน สถานการณ์ที่คล้ายคลึงกันจะเป็นกับคลาส Java Integer, Double, BigDecimal เป็นต้น if (obj instanceof Integer) {NumberStuff.handle((Integer)obj);} else if (obj instanceof BigDecimal) {BigDecimalStuff.handle((BigDecimal)obj);} else if (obj instanceof Double) {DoubleStuff.handle((Double)obj);} ฉันสามารถควบคุม NumberStuff และอื่น ๆ ได้ ฉันไม่ต้องการใช้โค้ดหลายบรรทัดโดยที่ไม่กี่บรรทัดจะทำได้ (บางครั้งฉันทำแผนที่ HashMap Integer.class กับอินสแตนซ์ของ IntegerStuff, BigDecimal.class ไปยังอินสแตนซ์ของ BigDecimalStuff เป็นต้น แต่วันนี้ฉันต้องการสิ่งที่ง่ายกว่านี้) ฉันต้องการอะไรง่ายๆดังนี้: public …

7
อะไรคือความแตกต่างระหว่าง a.getClass () และ A.class ใน Java?
ใน Java มีข้อดี / ข้อเสียอะไรอยู่รอบ ๆ ตัวเลือกที่จะใช้a.getClass()หรือA.class? สามารถใช้ได้ทุกที่ที่Class&lt;?&gt;คาดหวัง แต่ฉันคิดว่าจะมีประสิทธิภาพหรือประโยชน์ที่ลึกซึ้งอื่น ๆ ในการใช้ทั้งสองอย่างในสถานการณ์ที่แตกต่างกัน (เช่นเดียวกับที่มีClass.forName()และClassLoader.loadClass().
102 java  class  reflection 

4
เพิ่มคุณสมบัติให้กับชนิดที่ไม่ระบุชื่อหลังการสร้าง
ฉันใช้ออบเจ็กต์ที่ไม่ระบุชื่อเพื่อส่งต่อคุณสมบัติ Html ของฉันไปยังวิธีการช่วยเหลือบางอย่าง หากผู้บริโภคไม่ได้เพิ่มแอตทริบิวต์ ID ฉันต้องการเพิ่มในวิธีการช่วยเหลือของฉัน ฉันจะเพิ่มแอตทริบิวต์ให้กับวัตถุที่ไม่ระบุตัวตนนี้ได้อย่างไร

3
จะ จำกัด setAccess ได้เฉพาะการใช้งานที่ "ถูกต้อง" ได้อย่างไร
ยิ่งฉันเรียนรู้เกี่ยวกับพลังของjava.lang.reflect.AccessibleObject.setAccessibleมันมากเท่าไหร่ฉันก็ยิ่งประหลาดใจมากขึ้นในสิ่งที่สามารถทำได้ สิ่งนี้ดัดแปลงมาจากคำตอบของฉันสำหรับคำถาม ( การใช้การสะท้อนเพื่อเปลี่ยน File.separatorChar ขั้นสุดท้ายแบบคงที่สำหรับการทดสอบหน่วย ) import java.lang.reflect.*; public class EverythingIsTrue { static void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() &amp; ~Modifier.FINAL); field.set(null, newValue); } public static void main(String args[]) throws Exception { setFinalStatic(Boolean.class.getField("FALSE"), true); System.out.format("Everything is %s", false); // …

4
วิธีป้องกัน ReflectionTypeLoadException เมื่อเรียก Assembly.GetTypes ()
ฉันกำลังพยายามสแกนแอสเซมบลีสำหรับประเภทที่ใช้อินเทอร์เฟซเฉพาะโดยใช้โค้ดที่คล้ายกับสิ่งนี้: public List&lt;Type&gt; FindTypesImplementing&lt;T&gt;(string assemblyPath) { var matchingTypes = new List&lt;Type&gt;(); var asm = Assembly.LoadFrom(assemblyPath); foreach (var t in asm.GetTypes()) { if (typeof(T).IsAssignableFrom(t)) matchingTypes.Add(t); } return matchingTypes; } ปัญหาของฉันคือฉันได้รับReflectionTypeLoadExceptionเมื่อโทรasm.GetTypes()ในบางกรณีเช่นหากแอสเซมบลีมีประเภทที่อ้างถึงแอสเซมบลีซึ่งไม่สามารถใช้งานได้ในขณะนี้ ในกรณีของฉันฉันไม่สนใจประเภทที่ทำให้เกิดปัญหา ประเภทที่ฉันกำลังค้นหาไม่จำเป็นต้องมีชุดประกอบที่ไม่มีอยู่ คำถามคือเป็นไปได้ไหมที่จะข้าม / ละเว้นประเภทที่ทำให้เกิดข้อยกเว้น แต่ยังประมวลผลประเภทอื่น ๆ ที่มีอยู่ในชุดประกอบ


6
GetProperties () เพื่อส่งคืนคุณสมบัติทั้งหมดสำหรับลำดับชั้นการสืบทอดอินเทอร์เฟซ
สมมติว่าลำดับชั้นการสืบทอดสมมุติฐานดังต่อไปนี้: public interface IA { int ID { get; set; } } public interface IB : IA { string Name { get; set; } } ใช้การสะท้อนและการโทรต่อไปนี้: typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance) จะให้เฉพาะคุณสมบัติของอินเทอร์เฟซIBซึ่งก็คือ " Name" หากเราจะทำการทดสอบที่คล้ายกันกับรหัสต่อไปนี้ public abstract class A { public int ID { get; set; } } public class B : …
99 c#  .net  reflection 

3
ช่วงบนอินเทอร์เฟซ {} ซึ่งจัดเก็บชิ้นส่วน
t interface{}รับสถานการณ์ที่คุณมีฟังก์ชั่นที่ยอมรับ หากพิจารณาแล้วว่าtเป็นชิ้นฉันจะทำrangeอย่างไร func main() { data := []string{"one","two","three"} test(data) moredata := []int{1,2,3} test(data) } func test(t interface{}) { switch reflect.TypeOf(t).Kind() { case reflect.Slice: // how do I iterate here? for _,value := range t { fmt.Println(value) } } } ไปที่ Playground ตัวอย่าง: http://play.golang.org/p/DNldAlNShB

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