Tag: reflection

仅检索在Java类中声明的静态字段

我有以下class级: public class Test { public static int a = 0; public int b = 1; } 是否有可能使用reflection来获取静态字段的列表? 我知道我可以用Test.class.getDeclaredFields()获取所有字段的数组。 但是似乎没有办法确定Field实例是否代表静态字段。

为什么一些C#lambdaexpression式编译为静态方法?

正如你在下面的代码中看到的,我已经声明了一个Action<>对象作为variables。 有人请让我知道为什么这个行动方法委托行为像一个静态的方法? 为什么在下面的代码中返回true ? 码: public static void Main(string[] args) { Action<string> actionMethod = s => { Console.WriteLine("My Name is " + s); }; Console.WriteLine(actionMethod.Method.IsStatic); Console.Read(); } 输出:

Objective-C类 – >string像: – > @“NSArray”

我想从类对象本身获得一个类的string名称。 // For instance [NSArray className]; // @"NSArray" 我发现object_getClassName(id obj)但需要一个实例传递给它,在我的情况下,这是不必要的工作。 那么如何从类对象中获取string,而不是实例呢?

Javareflection中的getFields和getDeclaredFields有什么不同?

在使用Javareflection时,我对getFields方法和getDeclaredFields方法之间的区别有些困惑。 我读了getDeclaredFields让你访问类的所有字段,而getFields只返回公共字段。 如果是这种情况,为什么不总是使用getDeclaredFields ? 有人可以详细说明这一点,并解释两种方法之间的区别,什么时候/为什么你会想要使用一个在另一个?

检查一个类是否是Java中另一个类的子类

我正在玩Java的reflectionAPI,并试图处理一些领域。 现在我被困在确定我的领域的types。 string很容易,只要做myField.getType().equals(String.class) 。 其他非派生类也是如此。 但是,我如何检查派生类? 例如LinkedList作为List子类。 我找不到任何isSubclassOf(…)或extends(…)方法。 我是否需要遍历所有的getSuperClass()并自己find我的supeclass?

获取程序集名称

C#的exception类具有默认情况下设置为程序集名称的源属性。 有没有另一种方法来得到这个确切的string(不parsing不同的string)? 我已经尝试了以下内容: catch(Exception e) { string str = e.Source; //"EPA" – what I want str = System.Reflection.Assembly.GetExecutingAssembly().FullName; //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).FullName; //"EPA.Program" str = typeof(Program).Assembly.FullName; //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).Assembly.ToString(); //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).AssemblyQualifiedName; //"EPA.Program, EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" }

如何testingtypes是否是原始的

我有一段代码将一个types序列化为一个Html标签。 Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T tagBuilder.Attributes.Add("class", t.Name); foreach (PropertyInfo prop in t.GetProperties()) { object propValue = prop.GetValue(myObj, null); string stringValue = propValue != null ? propValue.ToString() : String.Empty; tagBuilder.Attributes.Add(prop.Name, stringValue); } 这很好,除了我希望它只为原始types,如int , double , bool等,以及其他types不是原始的,但可以像string一样容易序列化。 我希望它忽略像列表和其他自定义types的一切。 任何人都可以build议我怎么做? 还是我需要指定我想要允许的types,并切换属性的types,看看是否允许? 这有点乱,所以如果我有一个更整洁的方式会很好。

什么是invokedynamic,如何使用它?

我一直听到所有正在添加到JVM中的新酷function,其中一个很酷的function是invokedynamic。 我想知道它是什么,以及它如何使Java中的reflection编程更容易或更好?

使用reflection调用静态方法

我想调用静态的main方法。 我得到了Classtypes的对象,但我无法创build该类的实例,也无法调用static方法main 。

为什么GetType()在通过方法组委托调用时找不到types?

我们有一个调用Type.GetType静态方法的非常简单的程序。 两个例子都应该返回一个有效的types实例 只有第二个实际上是。 看起来像GetType使用的堆栈爬行有点奇怪,但究竟是什么问题呢? 它是错误还是一些模糊的function? public class TestClass { } class Program { static void Main(string[] args) { var fullName = typeof(TestClass).FullName; Console.WriteLine("Full name: {0}", fullName); new[] { fullName }.Select(Type.GetType).ToList().ForEach(t => Console.WriteLine("Method group: '{0}'", t)); new[] { fullName }.Select(t => Type.GetType(t)).ToList().ForEach(t => Console.WriteLine("Closure: '{0}'", t)); } } 运行: Full name: GetTypeBeingWeird.TestClass Method group: '' Closure: […]