【发布时间】:2017-11-27 12:05:40
【问题描述】:
我已经声明了一个接口Listable、一个包含Listable 的Node 和一个包含节点的SinglyLinkedList。 SinglyLinkedList 包含一个search() 方法,它利用了Listable 中的matches() 方法。我希望Listable 尽可能通用,所以matches() 中的参数数量应该是任意的。
search() 返回一个新的 SinglyLinkedList,仅包含匹配的 this 元素。
看下面的实现:
interface Listable {
// ...
boolean matches(Object... matchesArgs);
// ...
}
class Node {
Listable data;
Node next;
}
class SinglyLinkedList {
// ...
public SinglyLinkedList search(Object... searchArgs) {
// ...
somewhere: [someNode].data.matches(searchArgs)
// ...
}
// ...
}
这不起作用,因为matchesArgs 只有一个元素:数组searchArgs。我希望它等于searchArgs,而不是[searchArgs]。
我不想在matches() 的实现中解压缩数组,因为这将需要在您使用matches() 时传递参数数组,并且它还会尝试在未创建的地方处理问题。
在我看来,问题是searchArgs 在转发到matches() 时被打包到另一个数组中。我不想传递这个数组,而是将它的元素作为参数传递。
有没有办法在 Java 中做到这一点?
【问题讨论】:
-
您的代码会发出警告,因为它不明确。这种歧义的根源是在您的可变参数方法中使用了
Object。考虑对您的系统进行建模,以使您的方法不会收到糟糕的Object类型。
标签: java parameter-passing variadic-functions