Tag: reflection

如何遍历一个类的所有属性?

我有一堂课。 Public Class Foo Private _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property Private _Age As String Public Property Age() As String Get Return _Age End Get Set(ByVal value As String) _Age = value End Set End Property Private […]

是否有可能在运行时从Android应用程序dynamic加载库?

有没有什么办法让Android应用程序在运行时下载和使用Java库? 这里是一个例子: 想象一下,应用程序需要根据input值进行一些计算。 应用程序要求input这些值,然后检查所需的Classe或Method是否可用。 如果没有,则连接到服务器,下载所需的库,并在运行时加载它以使用reflection技术调用所需的方法。 实现可能会根据各种标准(例如正在下载库的用户)而改变。

一个Javastring真的是不可变的?

我们都知道String在Java中是不可变的,但请检查以下代码: String s1 = "Hello World"; String s2 = "Hello World"; String s3 = s1.substring(6); System.out.println(s1); // Hello World System.out.println(s2); // Hello World System.out.println(s3); // World Field field = String.class.getDeclaredField("value"); field.setAccessible(true); char[] value = (char[])field.get(s1); value[6] = 'J'; value[7] = 'a'; value[8] = 'v'; value[9] = 'a'; value[10] = '!'; System.out.println(s1); // Hello Java! System.out.println(s2); […]

在C#中运行时加载DLL

我想弄清楚如何在C#应用程序的运行时导入和使用.dll。 使用Assembly.LoadFile()我已经设法让我的程序加载dll(这部分是肯定工作,因为我能够得到与ToString())类的名称,但是我无法使用'输出'方法从我的控制台应用程序。 我正在编译.dll,然后将其移到我的控制台的项目。 CreateInstance之间有一个额外的步骤,然后才能够使用方法? 这是我的DLL中的类: namespace DLL { using System; public class Class1 { public void Output(string s) { Console.WriteLine(s); } } } 这里是我想要加载DLL的应用程序 namespace ConsoleApplication1 { using System; using System.Reflection; class Program { static void Main(string[] args) { var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); foreach(Type type in DLL.GetExportedTypes()) { var c = Activator.CreateInstance(type); c.Output(@"Hello"); […]

目标C反思/反思

有没有一个内置的方法,函数,API,普遍接受的方式等来转储Objective C中的实例化对象的内容,特别是在Apple的Cocoa / Cocoa-Touch环境中? 我希望能够做到这样的事情 MyType *the_thing = [[MyType alloc] init]; NSString *the_dump = [the_thing dump]; //pseudo code NSLog("Dumped Contents: %@", the_dump); 并显示对象的实例variables名称和值,以及可在运行时调用的任何方法。 理想情况下,一个易于阅读的格式。 对于熟悉PHP的开发人员,我基本上是在寻找等价的reflection函数( var_dump() , get_class_methods() )和OO Reflection API。

鉴别扩展方法的思考

在C#中有一种使用reflection技术来确定一个方法是否已经作为扩展方法添加到类中? 给定一个如下所示的扩展方法是否可以确定Reverse()已经添加到string类? public static class StringExtensions { public static string Reverse(this string value) { char[] cArray = value.ToCharArray(); Array.Reverse(cArray); return new string(cArray); } } 我们正在寻找一种机制,在unit testing中确定扩展方法是由开发人员适当添加的。 这样做的一个原因是开发人员可能会将类似的方法添加到实际的类中,如果是的话,编译器会select该方法。

通过使用string值进行reflection来设置属性

我想通过Reflection来设置一个对象的属性,其值为stringtypes。 所以,举个例子,假设我有一个Ship类, Latitude属性是double 。 这是我想要做的: Ship ship = new Ship(); string value = "5.5"; PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude"); propertyInfo.SetValue(ship, value, null); 就这样,这将抛出一个ArgumentException : “System.String”types的对象不能转换为“System.Double”types。 如何根据propertyInfo将值转换为正确的types?

用reflectionselect正确的通用方法

我想通过reflectionselect正确的通用方法,然后调用它。 通常这很容易。 例如 var method = typeof(MyType).GetMethod("TheMethod"); var typedMethod = method.MakeGenericMethod(theTypeToInstantiate); 然而,当方法有不同的generics重载时,问题就开始了。 例如System.Linq.Queryable类中的静态方法。 “Where”方法有两个定义 static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,bool>> predicate) static IQueryable<T> Where(this IQueryable<T> source, Expression<Func<T,int,bool>> predicate) 这个我GetGethod不起作用,因为它不能两个都去追求。 所以我想select正确的一个。 到目前为止,我经常采取第一种或第二种方法,这取决于我的需要。 喜欢这个: var method = typeof (Queryable).GetMethods().First(m => m.Name == "Where"); var typedMethod = method.MakeGenericMethod(theTypeToInstantiate); 但是我对此并不满意,因为我假定第一种方法是正确的。 我宁可想要通过参数typesfind正确的方法。 但我不知道如何。 我试着通过“types”,但没有奏效。 var method = typeof (Queryable).GetMethod( "Where", […]

如何在Java中使用reflection来实例化内部类?

我尝试实例化下面的Java代码中定义的内部类: public class Mother { public class Child { public void doStuff() { // … } } } 当我试图得到像这样的孩子的一个实例 Class<?> clazz= Class.forName("com.mycompany.Mother$Child"); Child c = clazz.newInstance(); 我得到这个例外: java.lang.InstantiationException: com.mycompany.Mother$Child at java.lang.Class.newInstance0(Class.java:340) at java.lang.Class.newInstance(Class.java:308) … 我错过了什么?

什么可能导致java.lang.reflect.InvocationTargetException?

那么,我试图理解和阅读什么可能会导致它,但我无法得到它: 我有我的代码在这个地方: try{ .. m.invoke(testObject); .. } catch(AssertionError e){ … } catch(Exception e){ .. } 事情是,当它试图调用某个方法时,它抛出InvocationTargetException而不是其他一些预期的exception(特别是ArrayIndexOutOfBoundsException )。 因为我真的知道什么方法被调用,我直接去了这个方法的代码,并添加了一个try-catch块的行,假设抛出ArrayIndexOutOfBoundsException ,它真的抛出ArrayIndexOutOfBoundsException预期。 然而,当它上升到某种程度上更改为InvocationTargetException并在上面的代码catch(Exception e) e是InvocationTargetException而不是ArrayIndexOutOfBoundsException如预期。 什么可能导致这样的行为,或者我该如何检查这样的事情?