在Filthy Rich Clients中,提供了以下代码:
public ImageLoadingWorker(JTextArea log, JPanel viewer, String... filenames) {}
究竟是什么意思?
答案 0 :(得分:17)
答案 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参数)调用这样的方法(或构造函数)时,编译器会发出警告,因为他无法真正创建这样的数组,而是使用数组擦除类型。