Questions tagged «reflection»

反射是程序在运行时观察和/或修改其结构和/或行为的能力。反射取决于支持的编程语言-请在使用此标记时标记正在使用的编程语言。


4
Java反射-setAccessible(true)的影响
我正在使用一些注释来动态设置类中字段的值。由于我想执行此操作,而不管它是公共的,受保护的还是私有的,因此setAccessible(true)每次调用该set()方法之前,我都会在Field对象上进行调用。我的问题是,setAccessible()电话会议对该领域本身会产生什么样的影响? 更具体地说,假设它是一个私有字段,并且这组代码调用setAccessible(true)。如果代码中的其他位置要通过反射来检索相同的字段,那么该字段是否已经可以访问?还是getDeclaredFields()和getDeclaredField()方法每次都返回Field对象的新实例? 我想说明问题的另一种方式是,如果我打电话setAccessible(true),完成后将其设置回原始值有多重要?
105 java  reflection 

19
确定代码是否作为单元测试的一部分运行
我有一个单元测试(nUnit)。如果方法通过单元测试运行,则调用堆栈的许多层都将失败。 理想情况下,您将使用诸如模拟之类的方法来设置此方法所依赖的对象,但这是第三方代码,如果没有很多工作,我将无法做到这一点。 我不想设置特定于nUnit的方法-这里的级别太多了,这是进行单元测试的一种糟糕方法。 相反,我想做的就是在调用堆栈中添加类似的内容 #IF DEBUG // Unit tests only included in debug build if (IsRunningInUnitTest) { // Do some setup to avoid error } #endif 那么关于如何编写IsRunningInUnitTest的任何想法吗? PS我完全意识到这不是一个很好的设计,但是我认为它比其他选择更好。
105 c#  reflection  nunit 

9
使用Razor / MVC3将AssemblyVersion放入网页时出现问题
我在_Layout.cshtml文件的页脚中使用以下代码,将AssemblyInfo版本数据放入MVC3站点中每个页面的页脚中。然而: @System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() 只需在页脚中打印: Revision 0.0.0.0 当我修改视图以使用以下命令显示“执行装配”的所有装配信息时 @System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString() 打印以下内容: Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 这表明“执行程序集”不是我的主要应用程序,而是视图本身。 如何获得ACTUAL应用程序的装配信息,而不仅仅是单个视图?



8
避免在Java中使用instanceof
具有“ 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 static handle(Integer num) { ... } public static handle(BigDecimal num) { ... } 但是Java不能那样工作。 我想在格式化时使用静态方法。我正在格式化的东西是复合的,其中Thing1可以包含Thing2s数组,Thing2可以包含Thing1s数组。当实现这样的格式化程序时,我遇到了一个问题: class Thing1Formatter { private static Thing2Formatter thing2Formatter = new Thing2Formatter(); public …


7
Java中的a.getClass()和A.class有什么区别?
在Java中,围绕使用a.getClass()或选择存在哪些利弊A.class?可以在Class<?>预期的任何地方使用这两种方法,但是我想在不同的情况下使用这两种方法都会有性能或其他微妙的好处(就像with Class.forName()和and一样ClassLoader.loadClass()。)
101 java  class  reflection 

2
如何在Go中获取函数名称?
给定一个函数,可以得到它的名字吗?说: func foo() { } func GetFunctionName(i interface{}) string { // ... } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } 有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。

3
如何将setAccessible限制为仅“合法”使用?
我对的力量了解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() & ~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); // "Everything is true" } } 您可以做真正令人发指的事情: …


4
调用Assembly.GetTypes()时如何防止ReflectionTypeLoadException
我正在尝试使用类似于以下代码的程序集来扫描实现特定接口的类型的类型: public List<Type> FindTypesImplementing<T>(string assemblyPath) { var matchingTypes = new List<Type>(); var asm = Assembly.LoadFrom(assemblyPath); foreach (var t in asm.GetTypes()) { if (typeof(T).IsAssignableFrom(t)) matchingTypes.Add(t); } return matchingTypes; } 我的问题是,在某些情况下ReflectionTypeLoadException调用时会asm.GetTypes()出现,例如,如果程序集包含引用当前不可用的程序集的类型。 就我而言,我对引起问题的类型不感兴趣。我要搜索的类型不需要不可用的程序集。 问题是:是否可以以某种方式跳过/忽略导致异常的类型,但仍处理程序集中包含的其他类型?

4
使用反射在C#中创建没有默认构造函数的类型实例
以下面的类为例: class Sometype { int someValue; public Sometype(int someValue) { this.someValue = someValue; } } 然后,我想使用反射创建此类型的实例: Type t = typeof(Sometype); object o = Activator.CreateInstance(t); 通常这将起作用,但是由于SomeType尚未定义无参数构造函数,因此对的调用Activator.CreateInstance将引发类型异常,MissingMethodException并显示消息“未为此对象定义无参数构造函数。 ”是否还有其他方法可以创建此类型的实例?将无参数的构造函数添加到我的所有类中有点麻烦。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.