我正在实现一个API,有一个方法可以传递程序从中读取资源的路径列表
public void importFrom(String... paths) {
}
我正在使用varargs使调用方法尽可能方便用户,就像这样
obj.importFrom("/foo", "/foo/bar);
这是varargs的适当用法吗?还是传递数组更好?
最佳答案
在您的情况下,varargs很好。您实际上并不需要对要导入的路径进行数组处理,因为除了将这些路径传递给importFrom
方法之外,您无需执行任何其他操作。
varargs功能使您不必为了将值的集合传递给一次性方法而显式创建数组,而您似乎确实在这里拥有此方法。
顺便说一句,如果您仍然想传递数组
public class VarargsDemo {
public static void f(String... args) {
for (String s: args) {
System.out.println(s);
}
}
public static void main(String[] args) {
String[] english = new String[]{"one", "two", "three"};
f(english);
f("uno", "dos", "tres");
}
}
因为行为是相同的,所以差异归结为(希望是次要的)问题,您希望方法签名“说”什么。当您声明一个采用显式数组参数的方法时,几乎就像您想强调要对数组对象进行操作一样,该对象已在方法外部定义,并在方法外部具有其自身的存在和重要性,并且其中可能涉及索引等操作。当用varargs声明方法时,就好像您在说“只给我一堆东西”一样。
再说一遍,这不一定是正确的。 JVM不知道它们之间的区别,它看到的只是运行时的一个数组。许多程序员不会因为方法签名的目的而费心。 Varargs旨在简化通话。
就是说,varargs的主要限制是这样的参数必须是方法的最后一个。在您的情况下,这不是问题,但通常需要考虑。