Я пытаюсь передать два генерика с известными типами (accumulationFunction
, resultBindings
) в подзаголовок invoke invoke ниже, но у меня проблемы. Может ли кто-нибудь помочь мне понять, как это можно достичь?Вызов метода с помощью общих парм с использованием отражения
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);
}
}
}
вы генерацию класса и вызов родов затем через Reflection? Почему бы вам не дать сгенерированному классу реализовать существующий интерфейс, который позволяет вам вызывать метод без Reflection? – Holger
Вы должны добавить трассировку исключения. Но что-то странное: dynamicGra должен быть статическим методом (вы вызываете нулевое значение). Затем вы попросили метод с 4 аргументами, и вы вызываете его с помощью 6 аргументов ... – nomoa
@nomoa. Я спрашиваю конкретно, как передать эти два отсутствующих параметра в getMethod –