Tag: reflection

可以使用reflection获得类中的瞬态场

可以使用reflection获得类中的transient场吗? (使用getDeclaredField(..) )

.NET中的Class.forName()等效?

什么是动态获取对象类型然后创建它的新实例的C#方式? 例如,我如何实现遵循Java代码的结果,但在C#中: MyClass x = (MyClass) Class.forName(“classes.MyChildClass”).newInstance();

如何确定Java类是否实现特定接口

我正在尝试使用reflection来确定传入的类是否实现了IsWdidget接口: public boolean isAWidget(Class clzz) { Class runtimeClass = ClassLoader.getSystemClassLoader().loadClass(clzz.getName()); Class[] impls = runtimeClass.getInterfaces(); for(Class clz : impls) if(clz.getName().equals(IsWidget.class.getName())) return true; return false; } 这是确定这个的最好/最有效的方法吗? 我还看到一个IsWidget.class.isAssignableFrom(Class)方法……

Java:如何检查Field是否为java.util.Collection类型

我有一个实用程序方法,遍历各种类并递归检索字段。 我想检查该字段是否为Collection。 以下是一些示例代码: void myMethod(Class classToCheck) Field[] fields = classToCheck.getDeclaredFields(); for(Field field:fields) { // check if field if a Collection } 在此先感谢您的帮助。

返回null的java中的Package.getPackage

我在com.abc包中有一些类A,B,C 我在com.pqr包中有一个Class Main 现在我想创建一个先前pacakge(abc)的包对象。 为此,我试过, Package pkg = Package.getPackage(“com.abc”); // This gives me null object in pkg 但是当我这样做的时候 Package pkg = A.class.getPackage(); // It works fine 任何人都可以通知,为什么Package.getPackage(“package-name”)不起作用?

如何检查类没有参数构造函数

Object obj = new Object(); try { obj.getClass().getConstructor(); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { dosomething(); e.printStackTrace(); } 我不想像这样检查,因为它抛出exception。 还有另一种方式吗?

如果只有一个完全限定的名称,如何获取java类的二进制名称?

reflection类和方法以及类加载器等需要使用所谓的“二进制”类名。 问题是,如果一个人只有一个完全限定的名称,即一个人在源代码中使用的名称,那么如何获得二进制名称。 例如: package frege; public static class RT { …. public static class X { …. } } 该类的完全限定名称为frege.RT.X 。 然而,要获得类对象,需要编写: Class.forName(“frege.RT$X”) 并不是 Class.forName(“frege.RT.X”) // fails with ClassNotFoundException 因为X恰好是frege.RT的内部类。 一种可能但又笨拙的解决方案是替换. 使用$来自后退,一个接一个,直到Class.forName()不再抛出ClassNotFoundException或者没有更多. 取代。 有没有更好/众所周知/标准的解决方案? 我查看了API文档中的Class , CLassLoader和java.lang.reflect但没有找到任何可用的东西。

使用Javareflection仅获取类的公共方法

我正在尝试使用reflection来获取在类中显式声明的所有公共方法(因此c.getMethods()将无效,因为它也会抓取超类方法)。 我可以用 Method[] allMethods = c.getDeclaredMethods(); 从这个类中获取方法,但我只想使用公共方法。 此时,我正在尝试获取修饰符并基于此执行某些操作,但由于某种原因,调试器中显示的修饰符值和修饰符值输出不同。 例如,我有一个私有的getNode方法,虽然“modifiers”值在调试器中显示为2 ,但当我执行System.out.println(c.getModifiers())时它输出为”1″ 。 奇怪的。 有另一种方法可以获得公共方法,还是我错过了一些明显的东西? 谢谢你的帮助!

将列表值反映到另一个列表中?

List listA; List listB; 我可以使用reflection将listA反映到listB中吗? 我得到了下面的代码但只反映了一个对象 public static B convert(A instance, Class targetClass) throws Exception { B target = (B)targetClass.newInstance(); for (Field targetField : targetClass.getDeclaredFields()) { targetField.setAccessible(true); Field field = instance.getClass().getDeclaredField(targetField.getName()); field.setAccessible(true); targetField.set(target, field.get(instance)); } return target; }

如何通过检查找到返回类型的参数化类型?

我正在使用reflection来获取所有类中的所有方法: Method[] allMethods = c.getDeclaredMethods(); 之后我正在迭代这些方法 for (Method m: allMethods){ //I want to find out if the return is is a parameterized type or not m.getReturnType(); } 例如:如果我有这样的方法: public Set getCats(); 如何使用reflection找出包含Cat作为参数化类型的返回类型?