接受任何事情并保留签名的方法?

时间:2014-07-01 01:50:43

标签: java reflection

您可以定义接受任何内容(Object... arguments)的方法,但是,如果您使用("A", "B")(["A", "B"])来调用它,则arguments的值将是相同的{{1} - 即原始签名将丢失。

有没有办法保存它?

P.S。为什么我需要它:

要记住被调用的方法和参数,然后通过反射回复它。它破裂的例子:

有一个方法,我想稍后打电话给你:

["A", "B"]

我告诉计算机稍后会用一些论点来调用它。

MyObj {
  myMeth (String[] array) {...}
}
myObj = new MyObj()

它记得它,用户反思找到实际的方法并调用它。 它失败了,因为原始签名丢失了,而不是callLater(myObj, "myMeth", ["A", "B"]) 它试图找到(String[])

1 个答案:

答案 0 :(得分:1)

通过使用强制转换,在呼叫者方解决了这种歧义。在这种情况下,您首先将数组转换为(Object),以将其视为varargs参数。例如,将数组作为一个参数传递:

callLater(myObj, "myMeth", (Object) new String[] {"A", "B"});

传递两个参数:

callLater(myObj, "myMeth", (Object[]) new String[] {"A", "B"});

或简单地说:

callLater(myObj, "myMeth", "A", "B");