0
我試圖將兩種已知類型的泛型(accumulationFunction
,resultBindings
)傳入下面的反射調用例程,但我遇到了麻煩。有人能幫助我理解如何實現這一目標嗎?使用反射調用具有泛型參數的方法
package com.amir.method.compiler;
//hidden imports
import java.util.Set;
public class CompiledReferencedAttributeMethod implements CompiledMethod {
final Class<?> generatedClazz;
//how do i pass the arguments below into the invoke routine??
final KnownWorkData<AccumulationFunction> accumulationFunction;
final KnownWorkData<Set<Executable<InstanceSetValue>>> resultBindings;
public CompiledReferencedAttributeMethod(final int hash,
final KnownWorkData<AccumulationFunction> accumulationFunction,
final KnownWorkData<Set<Executable<InstanceSetValue>>> resultBindings) {
this.generatedClazz = ReferencedAttributeMethodGenerator.get().compileMethod(
"com.amir.hotspot.GeneratedGRAMethod" +hash, "dynamicGra", accumulationFunction, resultBindings);
this.accumulationFunction = accumulationFunction;
this.resultBindings = resultBindings;
}
@Override
public WorkDataValue invokeCompiled(final Instance onInst,
final ExecutionParms parm,
final WorkDataDefinition returntype,
final TaskContext context) {
try {
return (WorkDataValue) this.generatedClazz
.getMethod("dynamicGra",
Instance.class,
ExecutionParms.class,
WorkDataDefinition.class,
TaskContext.class)
.invoke(null, onInst, parm, returntype, this.accumulationFunction, this.resultBindings, context);
} catch(Exception e) {
throw new ExecuteCompiledMethodException(this.toString(), e);
}
}
}
你生成一個類,並調用屬:您要調用的方法傳遞generatedClazz實例特德代碼然後通過反射?爲什麼不讓生成的類實現一個現有的接口,允許您在沒有Reflection的情況下調用該方法? – Holger 2014-10-28 16:39:35
您應該添加異常追蹤。但奇怪的是:dynamicGra必須是一個靜態方法(用null值調用)。然後你問一個4個ARGS方法,你用6名ARGS ... – nomoa 2014-10-28 16:40:12
@nomoa,就是我要問具體是,我如何通過這兩個缺少的參數getMethod – 2014-10-28 16:45:37