Tag: reflection

Java如何通过以原始types作为参数的reflection来调用方法

我在课堂上有以下两种方法: public void Test(int i){ System.out.println("1"); } public void Test(Integer i){ System.out.println("2"); } 下面这行代码 this.getClass().getMethod("Test",Integer.class).invoke(this, 10); 打印2 ,如何打印1 ?

如何使用reflection(Java)调用私有静态方法?

我想调用一个私有的静态方法。 我有它的名字。 我听说可以使用Javareflection机制来完成。 我该怎么做? 编辑:我试图调用该方法时遇到的一个问题是如何指定其参数的types。 我的方法接收一个参数,其types是Map。 因此,我不能做Map<User, String>.TYPE (在运行时,因为Java Type擦除,没有Map这样的东西)。 有没有另一种方法来获得该方法?

如何检查对象是一个特定types的数组?

这工作正常: var expectedType = typeof(string); object value = "…"; if (value.GetType().IsAssignableFrom(expectedType)) { … } 但是,我怎么检查值是一个string数组没有设置expectedType为typeof(string[]) ? 我想做一些事情: var expectedType = typeof(string); object value = new[] {"…", "—"}; if (value.GetType().IsArrayOf(expectedType)) // <— { … } 这可能吗?

获取当前方法的名称

这是一个愚蠢的问题,但是有可能从该方法中获取当前正在执行的方法的名称? Public Sub SomeMethod() Dim methodName as String = System.Reflection.[function to get the current method name here?] End Sub 谢谢

如何获得成员variables的注释?

我想知道一个类的某些成员variables的注释,我使用BeanInfo beanInfo = Introspector.getBeanInfo(User.class)来内省一个类,并使用BeanInfo.getPropertyDescriptors()来查找特定的属性,并使用Class type = propertyDescriptor.getPropertyType()来获得属性的类。 但我不知道如何获得注释添加到成员variables? 我尝试了type.getAnnotations()和type.getDeclaredAnnotations() ,但都返回类的注释,而不是我想要的。 例如 : class User { @Id private Long id; @Column(name="ADDRESS_ID") private Address address; // getters , setters } @Entity @Table(name = "Address") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) class Address { … } 我想获得地址的注释:@Column,而不是类Address的注释(@Entity,@Table,@Cache)。 如何实现它? 谢谢。

任何方法来解决WPF的调用GC.Collect(2)除了reflection吗?

我最近不得不把这个怪物检入到生产代码中来操纵WPF类中的私有字段:(tl; dr我该如何避免这样做?) private static class MemoryPressurePatcher { private static Timer gcResetTimer; private static Stopwatch collectionTimer; private static Stopwatch allocationTimer; private static object lockObject; public static void Patch() { Type memoryPressureType = typeof(Duration).Assembly.GetType("MS.Internal.MemoryPressure"); if (memoryPressureType != null) { collectionTimer = memoryPressureType.GetField("_collectionTimer", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null) as Stopwatch; allocationTimer = memoryPressureType.GetField("_allocationTimer", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null) as Stopwatch; lockObject = […]

从string生成一个类,并在Scala 2.10中实例化它

在Scala 2.10中,我怎样从string(可能使用Toolbox api)生成一个类,然后用Scala的reflection来实例化?

你能从一个MethodInfo对象得到一个Func <T>(或类似的)吗?

我认识到,一般来说,使用反思会有性能影响。 (实际上,我自己并不是一个反思的粉丝,这纯粹是一个学术问题。) 假设存在一些看起来像这样的类: public class MyClass { public string GetName() { return "My Name"; } } 忍受我在这里。 我知道,如果我有一个名为x的MyClass的实例,我可以调用x.GetName() 。 此外,我可以设置一个Func<string>variables为x.GetName 。 这是我的问题。 假设我不知道上面的类叫做MyClass ; 我有一些对象,但我不知道它是什么。 我可以通过执行以下操作检查该对象是否具有GetName方法: MethodInfo getName = x.GetType().GetMethod("GetName"); 假设getName不为空。 然后我不能进一步检查是否getName.ReturnType == typeof(string)和getName.GetParameters().Length == 0 ,在这一点上,我不会相当肯定,我的getName对象表示的方法可以肯定会被转换为Func<string> ,不知何故? 我意识到有一个MethodInfo.Invoke ,我也意识到我总是可以创build一个Func<string>如: Func<string> getNameFunc = () => getName.Invoke(x, null); 我想我问的是,如果有任何方法从一个MethodInfo对象到它所表示的实际方法,招致反映在过程中的性能成本,但在此之后 ,能够直接调用该方法(通过,例如,一个Func<string>或类似的东西) 没有性能损失。 我所设想的可能是这样的: // obviously this would […]

你怎么能循环一个类的​​属性?

有没有办法在C#循环一个类的​​属性? 基本上我有一个包含大量属性的类(它基本上保存了大型数据库查询的结果)。 我需要输出这些结果作为一个CSV文件,所以需要将每个值附加到一个string。 它手动将每个值附加到一个string的显而易见的方式,但有没有办法有效地循环结果对象,并依次为每个属性添加值?

获取Java基本types的默认值

我手边有一个java原始types: Class c = int.class; // or long.class, or boolean.class 我想为这个类获得一个“默认值” – 具体地说,如果这个类没有被初始化的话,这个值被分配给这个types的字段。 例如,数字“0”,布尔值“假”。 有没有一个通用的方法来做到这一点? 我试过了 c.newInstance() 但是我得到一个InstantiationException,而不是一个默认的实例。