我正在实现一个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的主要限制是这样的参数必须是方法的最后一个。在您的情况下,这不是问题,但通常需要考虑。

07-25 22:43
查看更多