Java ...运算符

时间:2011-02-14 00:28:59

标签: java variadic-functions

在Filthy Rich Clients中,提供了以下代码:


public ImageLoadingWorker(JTextArea log, JPanel viewer, String... filenames) {}

究竟是什么意思?

5 个答案:

答案 0 :(得分:17)

它用于variable arguments

答案 1 :(得分:4)

这意味着可以使用名为ImageLoadingWorker的{​​{1}}数组访问从第三个开始传递到String的所有参数。

答案 2 :(得分:4)

这意味着您可以为filenames传递任意数量的值,例如“foo”,“bar”,“car”,“bus”等。它被称为varargs。为了进一步解释,下面的两个调用都是有效的:

ImageLoadingWorker(log, viewer, "foo", "bar")

ImageLoadingWorker(log, viewer, "foo", "bar", "car", "bus")

答案 3 :(得分:3)

它是varargs,java 5中的新功能。这意味着您可以在方法调用中拥有任意数量的文件名。

答案 4 :(得分:3)

从方法(或构造函数,在您的情况下)本身的角度来看,它只是编写'[]'的另一种方式,并且仅对方法的最后一个参数有效。也就是说,该方法在filenames参数中获取一个字符串数组。

对于此方法的调用者(意味着编写调用该方法的代码的人),最好:他们可以选择是否提供String[]个对象或任意数量的String个对象(来自0到方法大小限制允许的数量),然后编译器为您创建一个包含这些对象的数组。

所以,在打电话时你现在可以写

 ... = new ImageLoadingWorker(area, viewer, file1, file2, file3);

并且编译器创建

 ... = new ImageLoadingWorker(area, viewer, new String[]{file1, file2, file3});

给你。

(如果有另一种方法采用精确的字符串数和相同的其他参数,则首选而不是varargs-one。)

当使用包含类型变量的参数化类型(对于varargs参数)调用这样的方法(或构造函数)时,编译器会发出警告,因为他无法真正创建这样的数组,而是使用数组擦除类型。