我正在尝试使用 web3j 编写一个 Java 应用程序,该应用程序可以读取任意 abi 文件,向用户显示 AbiDefinitions 列表并让他调用他选择的常量函数。如何计算下面的 outTypes?
AbiDefinition functionDef = ...; // found at runtime
List<Type> args = ...; // I know how to do this
List<NamedType> outputs = functionDef.getOutputs(); // list of output parameters
List<TypeReference<?>> outTypes = ????;
Function function = new Function(functionDef.getName(), args, outTypes);
TypeReference 类使用泛型类型的技巧,当泛型类型在源代码中被硬编码时,这些技巧可以工作,如下所示:
new TypeReference.StaticArrayTypeReference< StaticArray< Int256>>(2){}
这就是生成的合约包装器会做的事情。
对于简单类型,我可以这样做:
Class<Type> type = (Class<Type>)AbiTypes.getType(typeName);
TypeReference<?> typeRef = TypeReference.create(type);
对于像“int256[2]”这样的数组类型,我该怎么办?