我可以在Java上动态填充args []参数吗?

时间:2019-07-19 09:36:37

标签: java arrays parameters runtime

很高兴认识您。 我需要一些有关Java8上的代码的建议。

我有这种方法

public Object method (String objectName, List<ParamData> paramsList)

paramList可以在其​​中包含一个或多个对象,然后我调用Method类的一个对象的invoke方法。

// params must be the objects that paramList have
object = find.invoke(class, params);

invoke方法可以获取一个或多个参数,我想向其发送参数paramList中具有的对象,但是每次可以是不同数量的对象,以及可以接收一个参数的不同Method实例。 ,两个...而且我不知道是否有某种方法可以在运行时填充此参数,但不是数组。

如果您能给予我任何帮助,我将不胜感激。 非常感谢。

我只尝试向其发送显然不起作用的该params对象的列表,此刻我意识到的其他想法都将不起作用。

1 个答案:

答案 0 :(得分:0)

Method类中,invoke()定义为:

public Object invoke(Object obj, Object... args)

因此,您所需要做的就是将您操纵的List转换为数组:List.toArray()做到了。
然后将其传递到invoke(),例如:

public Object method (String objectName, List<ParamData> paramsList){
   ParamData[] params = paramsList.toArray(new ParamData(paramsList.size()));
   // ...
   Method method = ...
   method.invoke(obj, params);
}

作为旁注,这是一种动态填充数组的方法:从源(列表)到数组,但是您还有其他方法可以用诸如Arrays.fill(Object[] a, Object val)之类的对象动态填充数组。此处的区别在于,它使用相同的对象引用val填充了数组元素。这不是您的要求:您想从数据源(列表)中进行填充。