我正在编写一些调用Field.set的代码和Field.get成千上万次。显然这很慢,因为reflection.我想看看我是否可以使用MethodHandle来提高性能在Java7中。到目前为止,这就是我所拥有的:我正在做的不是field.set(pojo,value):privatestaticfinalMapsetHandles=newHashMap();MethodHandlemh=setHandles.get(field);if(mh==null){mh=lookup.unreflectSetter(field);setHandles.put(field,mh);}mh.inv
我正在编写一些调用Field.set的代码和Field.get成千上万次。显然这很慢,因为reflection.我想看看我是否可以使用MethodHandle来提高性能在Java7中。到目前为止,这就是我所拥有的:我正在做的不是field.set(pojo,value):privatestaticfinalMapsetHandles=newHashMap();MethodHandlemh=setHandles.get(field);if(mh==null){mh=lookup.unreflectSetter(field);setHandles.put(field,mh);}mh.inv
我正在研究JDK1.7的新功能,但我无法理解MethodHandle的设计用途?我理解(直接)调用静态方法(以及在这种情况下直接使用核心反射API)。我也理解(直接)调用虚拟方法(非静态,非最终)(以及使用需要通过类的层次结构obj.getClass().getSuperclass()的核心反射API).非虚方法的调用可以视为前者的特例。是的,我知道过载存在问题。如果要调用方法,则必须提供确切的签名。您不能以简单的方式检查重载方法。但是,MethodHandle是关于什么的?反射API允许您“查看”对象内部而无需任何预先假设(如实现接口(interface))。您可以出于某种目的检查对
我正在研究JDK1.7的新功能,但我无法理解MethodHandle的设计用途?我理解(直接)调用静态方法(以及在这种情况下直接使用核心反射API)。我也理解(直接)调用虚拟方法(非静态,非最终)(以及使用需要通过类的层次结构obj.getClass().getSuperclass()的核心反射API).非虚方法的调用可以视为前者的特例。是的,我知道过载存在问题。如果要调用方法,则必须提供确切的签名。您不能以简单的方式检查重载方法。但是,MethodHandle是关于什么的?反射API允许您“查看”对象内部而无需任何预先假设(如实现接口(interface))。您可以出于某种目的检查对
MethodTypemethodType=MethodType.methodType(void.class,ByteBuffer.class);MethodHandlehandle=MethodHandles.publicLookup().findConstructor(type,methodType);Function=handle;//???最后的assignment作业能拿到吗?倒置的方式不起作用:IsitpossibletoconvertmethodreferencetoMethodHandle?这里是另一个可复制粘贴的例子:newInteger("123");MethodTy
假设我在给定类型(类/接口(interface))中有三个方法:publicvoidfoo(Integerinteger);publicvoidfoo(Numbernumber);publicvoidfoo(Objectobject);使用MethodHandle或反射,我想为仅在运行时知道类型的对象找到最具体的重载方法。即我想做JLS15.12在运行时。例如,假设我在包含这三个方法的上述类型的方法中有以下内容:Objectobject=getLong();//runtimetypeisLong*justanexample*MethodHandles.lookup().bind(thi