Tag: reflection

你怎么能得到方法参数的名字?

如果我有一个方法如: public void MyMethod(int arg1, string arg2) 我将如何去获取参数的实际名称? 我似乎无法find任何在MethodInfo实际上会给我参数的名称。 我想写一个看起来像这样的方法: public static string GetParamName(MethodInfo method, int index) 所以如果我用这个方法调用这个方法 string name = GetParamName(MyMethod, 0) 它会返回“arg1”。 这可能吗?

用java 8 lambdaexpression式打印错误信息

我想使用一个静态方法作为setter助手来捕获exception,并打印有关失败操作的debugging信息。 我不想只有例外的细节。 我想显示哪些属性正在设置,以便详细帮助快速debugging问题。 我正在使用Java 8。 我应该如何提供或检测设置的财产? 我希望在示例中删除“名称”string,并得到相同的结果。 我知道我不能使用所提供的setter方法的reflection来转换为lambdaexpression式,然后转换为BiConsumer。 我得到这个,但需要提供属性名称。 /** setter helper method **/ private static <E, V> void set(E o, BiConsumer<E, V> setter, Supplier<V> valueSupplier, String propertyName) { try { setter.accept(o, valueSupplier.get()); } catch (RuntimeException e) { throw new RuntimeException("Failed to set the value of " + propertyName, e); } } 例: Person p […]

如何使用给定的Type对象调用generics方法?

我想用给定的types对象调用generics方法。 void Foo(Type t) { MyGenericMethod<t>(); } 显然是行不通的。 我怎样才能使它工作?

如何使用reflection访问内部类

我如何访问程序集的内部类? 说我想访问System.ComponentModel.Design.DesignerHost。 这里的DesignerHost是一个内部密封的类。 我如何编写一个代码来加载程序集和types?

用reflection调用静态方法

我在命名空间mySolution.Macros有几个静态类,如 static class Indent{ public static void Run(){ // implementation } // other helper methods } 所以我的问题是如何在reflection的帮助下调用这些方法? 如果方法不是静态的,那么我可以这样做: var macroClasses = Assembly.GetExecutingAssembly().GetTypes().Where( x => x.Namespace.ToUpper().Contains("MACRO") ); foreach (var tempClass in macroClasses) { var curInsance = Activator.CreateInstance(tempClass); // I know have an instance of a macro and will be able to run it // using reflection […]

如何从类X复制到类Y具有相同的属性名称在C#中?

假设我有两个类: public class Student { public int Id {get; set;} public string Name {get; set;} public IList<Course> Courses{ get; set;} } public class StudentDTO { public int Id {get; set;} public string Name {get; set;} public IList<CourseDTO> Courses{ get; set;} } 我想将学生类的值复制到StudentDTO类: var student = new Student(); StudentDTO studentDTO = student; 我如何通过反思或其他解决scheme来做到这一点?

使用.Net,我怎样才能确定一个types是一个数值ValueType?

但是这里有一个例子: Dim desiredType as Type if IsNumeric(desiredType) then … 编辑:我只知道types,而不是作为一个string的值。 好的,所以不幸的是我必须循环访问TypeCode。 但这是一个很好的方法来做到这一点: if ((desiredType.IsArray)) return 0; switch (Type.GetTypeCode(desiredType)) { case 3: case 6: case 7: case 9: case 11: case 13: case 14: case 15: return 1; } ;return 0;

如何使用URLClassLoader加载* .class文件?

我和Reflection一起玩,我想我会做一些加载类并打印类中所有字段的名字。 我已经做了一个小小的Hello World世界types的东西来检查: kent@rat:~/eclipsews/SmallExample/bin$ ls IndependentClass.class kent@rat:~/eclipsews/SmallExample/bin$ java IndependentClass Hello! Goodbye! kent@rat:~/eclipsews/SmallExample/bin$ pwd /home/kent/eclipsews/SmallExample/bin kent@rat:~/eclipsews/SmallExample/bin$ 基于上述,我得出两个结论: 它存在于/home/kent/eclipsews/SmallExample/bin/IndependentClass.class 有用! (所以它必须是一个可以通过类加载器加载的正确的.class文件) 然后是使用reflection的代码:(引起exception的线被标记) import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class InspectClass { @SuppressWarnings("unchecked") public static void main(String[] args) throws ClassNotFoundException, MalformedURLException { URL classUrl; classUrl = new URL("file:///home/kent/eclipsews/SmallExample/bin/IndependentClass.class"); URL[] classUrls = { classUrl }; URLClassLoader […]

System.Type和System.RuntimeType在C#中有什么区别?

我正在尝试今天进行一些常规testing,并在汇编时(通过调用Assembly.GetTypes() )获取所有types,当我偶然发现某些东西时: System.RuntimeType:[First.Namespace.FirstClass] 每当我尝试比较typeof(FirstClass)types,他们是不相等的。 所以,当我试图find所有包含FirstClasstypes作为generics参数,我没有find任何。 System.RuntimeType和System.Type什么区别? 有什么办法可以解决我的问题吗?

reflection通用获取字段值

我试图通过reflection来接收字段值。 问题是我不知道字段types,并得到价值时,必须决定它。 这个代码导致这个例外: 无法将java.lang.String字段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(); 我该怎么做?