Tag: reflection

关于MethodHandle API的一些基本问题

如何通过MethodHandles.lookup()获取所有声明的方法? 我如何获得所有声明的字段? MethodHandle.invoke() , MethodHandle.invokeExact()和MethodHandle.invokeWithArguments()区别是什么? 另外,我将非常感谢有关使用Methodhandle API for Java devloper的教程 。 我强调,我正在编写静态类型语言普通旧Java,我不是JVM开发人员,特别是我对整个字节码废话(invokedynamic)并不感兴趣。 我想弄清楚如何使用这个新API而不是Java Core API。 EDITED-2: @Glen Best下面提供了一些我只想提供的参考资料http://www.oraclejavamagazine-digital.com/javamagazine/20130102?pg=52&search_term=methodhandle&doc_id=-1#pg50这正是我想要的。 我发现实际上有一些新的词汇表。例如, 目标实际上是指MethodHandle(而不是对象进行调度),而调用站点实际上是“调用”“函数指针”又称MethodHandle的代码。 此外,必须了解MethodHandle API 不是替代 Core Reflection API而不是补充它。 例如,您无法使用MethodHandle“发现”所有方法,而您需要Core Reflection API。 但是当你“找到”你想要的方法时,你可以切换到MethodHandle,例如,绑定一些参数,或者将它的签名“改变”(改编)给varargs。 编辑: 我仍然想找出答案。 我写了一些我想与大家分享的测试。 package alexander.berkovich; import static org.junit.Assert.assertSame; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.junit.BeforeClass; import org.junit.Test; public class MethodHandlerCleanTest […]

Javareflection:如何在运行时覆盖或生成方法?

在普通Java中,可以在运行时以编程方式覆盖类的方法(甚至创建新方法)? 即使我在编译时不了解类,我也希望能够这样做。 我在运行时重写的意思是: abstract class MyClass{ public void myMethod(); } class Overrider extends MyClass{ @Override public void myMethod(){} } class Injector{ public static void myMethod(){ // STATIC !!! // do actual stuff } } // some magic code goes here Overrider altered = doMagic( MyClass.class, Overrider.class, Injector.class); 现在,这个调用…… altered.myMethod(); …将调用Injector.myMethod()而不是Overrider.myMethod() 。 Injector.myMethod()是静态的 ,因为在执行“magic”之后,它会从不同的类实例(它是Overrider)调用,(因此我们阻止它访问本地字段)。

使用reflection设置对象属性

我按名称获取类,我需要使用相应的数据更新它们,我的问题是如何使用java我想要添加方法一些虚拟数据。 我不知道类类型我只是获取类名并使用reflection来获取他的数据 我使用此代码来获取类实例和 Class classHandle = Class.forName(className); Object myObject = classHandle.newInstance(); // iterate through all the methods declared by the class for (Method method : classHandle.getMethods()) { // find all the set methods if (method.getName().matches(“set[AZ].*”) 并且知道我找到了我想用数据更新它的set方法的列表我该怎么做。 假设在类名中我得到了人,而类有setSalary和setFirstName等我怎样才能用reflection设置它们? public class Person { public void setSalery(double salery) { this.salery = salery; } public void setFirstName(String FirstName) { […]

背景中的反思 – Android

在我问这个之前我想说我不是在问你究竟是怎么做的,但是我正在寻找正确方向的提示或推动,因为我没有代码,但我想自己解决。 在我的Android应用程序中,我有一个普通的黑色背景,顶部有一个对象队列。 这些对象左右滚动(见图)。 我的问题是如何在背景中反映这些对象,就像在图像中完成一样? 我在谷歌和这个网站上搜索过类似的内容,但我找不到任何关于此事的内容

如何调用MethodInvoke – reflection

如果我有一个方法,它接受一个int[]作为参数,我希望在此调用method.invoke ,那么我是否需要执行以下操作 Object[] anArray = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}; method.invoke(obj, anArray); 它是否像我似乎得到错误一样简单? 问候

关于实例创建的Java 8注释

在Javadocs for Annotations中,它声明以下内容可以用Java 8编写: new @Interned MyObject(); 无论如何都要从通过reflection注释的对象中检索注释@Interned? 我熟悉从方法,字段,类等中检索注释的典型方法,但我想知道在Java 8中是否可以在运行时将特定实例与注释相关联。

使用reflection调用类中的所有setter

我有一个域对象,为了这个问题的目的,我将使用以下私有变量调用Person: String name int age 每个人都有吸气剂和二传手。 现在我还有一个Map其中包含以下条目: name, phil age, 35 我想在Person类中填充所有setter方法的列表,然后循环遍历此列表并使用map中的值调用每个方法。 这是否可能,因为我在网上看不到任何接近这个的例子。 非常感谢例子。

从Class对象中指定java中的generics类型

为什么这是错的: Class type = Integer.class; ArrayList = new ArrayList(); ? 在给定类对象的情况下,是否无法实例化特定类型的类? 显然我永远不会直接这样做,这只是展示所需内容的一个例子。 在我需要的实际代码中,我不知道该类型的名称。 例如 public void createAList(Class type) { ArrayList toReturn = new ArrayList(); return toReturn; }

是否可以获取类的所有子类?

可能重复: 如何在Java中找到给定类的所有子类? 嗨, 我想获得一个在运行时用Java实现接口的类列表,这样我就可以进行查找服务而无需对其进行硬编码。 有一个简单的方法吗? 我不担心。

GetDeclaredMethods(java)中的问题

我的代码中有一个小问题 我有2节课 public class A { public A foo(int a) {return new A();} } public class B extends A{ public B foo(int x){ return new B();} } 现在在我的代码中我想只打印在B类中声明的方法 通过这种方式 B b = new B(); Method[] m = b.getClass().getDeclaredMethods(); for (int i = 0; i < m.length; i++) { System.out.print(m[i].getName()); } 为什么输出 foo foo 为什么GetDeclaredMethods在A类中也找到了foo? 我该怎么办呢? […]