Tag: reflection

JDKdynamic代理和CGLib有什么区别?

在代理devise模式的情况下, JDK的dynamic代理和第三方dynamic代码生成API(如CGLib)有什么区别 ? 这两种方法的区别是什么?什么时候应该select哪一种?

这个Java代码片段如何工作? (string池和reflection)

与reflection结合的Javastring池可以在Java中产生一些难以想象的结果: import java.lang.reflect.Field; class MessingWithString { public static void main (String[] args) { String str = "Mario"; toLuigi(str); System.out.println(str + " " + "Mario"); } public static void toLuigi(String original) { try { Field stringValue = String.class.getDeclaredField("value"); stringValue.setAccessible(true); stringValue.set(original, "Luigi".toCharArray()); } catch (Exception ex) { // Ignore exceptions } } } 以上代码将打印: "Luigi Luigi" 马里奥怎么了?

什么是C#相当于Java的isInstance()?

我知道is和为instanceof ,但reflectionisInstance()方法呢?

如何找出每个对象在ArrayList <Object>中的types?

我有一个ArrayList由从db导入的不同元素组成,由string,数字,双精度和整数组成。 有没有办法使用reflectiontypes技术来找出每个元素的每种types的数据? 仅供参考:有这么多types的数据的原因是,这是一个Java代码被写入用不同的数据库来实现。

创build后将属性添加到匿名types

我使用匿名对象将我的Html属性传递给一些辅助方法。 如果消费者没有添加一个ID属性,我想添加它在我的帮手方法。 我怎样才能给这个匿名对象添加一个属性?

在Java中通过reflection访问私有inheritance的字段

我发现了一种通过class.getDeclaredFields();获得inheritance成员的方法class.getDeclaredFields(); 并访问私人成员通过class.getFields()但我在寻找私人inheritance领域。 我怎么能做到这一点?

我怎样才能检查一个方法是否使用reflection静态?

我只想在运行时发现一个类的静态方法,我该怎么做呢? 或者,如何区分静态和非静态方法。

为什么甚至有可能改变一个私人成员,或在C#中使用reflection运行私有方法?

我最近遇到了一个我正在使用C#的问题,通过使用reflection设置私有成员来解决这个问题。 我惊讶地发现,设置一个私人成员/字段,并运行私有方法是C#允许和可能的东西。 这不是如何做这些事情的问题,他们是有据可查的,我的问题是:为什么? 如果将字段/成员/方法设置为私有/内部,为什么C#作为一种语言允许将这些字段设置在范围之外? 我认为这会抛出某种例外。 如果这个类想让他们改变或设置不会有一个方法或构造?

如何加载与所有引用recursion的程序集到AppDomain?

我想加载到一个新的AppDomain一些程序集,其中有一个复杂的引用树(MyDll.dll – > Microsoft.Office.Interop.Excel.dll – > Microsoft.Vbe.Interop.dll – > Office.dll – > stdole.dll ) 据我所知,当一个程序集加载到AppDomain ,它的引用不会自动加载,我必须手动加载它们。 所以当我这样做时: string dir = @"SomePath"; // different from AppDomain.CurrentDomain.BaseDirectory string path = System.IO.Path.Combine(dir, "MyDll.dll"); AppDomainSetup setup = AppDomain.CurrentDomain.SetupInformation; setup.ApplicationBase = dir; AppDomain domain = AppDomain.CreateDomain("SomeAppDomain", null, setup); domain.Load(AssemblyName.GetAssemblyName(path)); 并得到FileNotFoundException : 无法加载文件或程序集'MyDll,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一。 该系统找不到指定的文件。 我认为关键是它的一个依赖 […]

避免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(); […]