您可以定义接受任何内容(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[])
。
答案 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");