看代码的时候,发现方法调用的时候有个省略号:
@Override
public Currency doInBackground(String... params) {
String code = params[0];
return converterService.getCurrency(code);
}
原以为是不是copy的时候出错了,但考到方下面用数组,难道是可变参数?可变参数的用法和以前的C语言不一样,C语言直接为(…)。搜索了一下,才发现是JAVA中的可变参数。
Java SE新的版本已经可以“支持”【会出现警告】泛型的可变参数。
消除警告的方法,和原理,请参考JAVA官方网站的这篇文章:“Using Non-Reifiable Parameters with Varargs Methods”。
JAVA泛型-可变参数与泛型方法
import java.util.*; public class GenericVarargs { public static <T> List<T> makeList(T... args) { List<T> result = new ArrayList<T>(); for (T item : args){ result.add(item); } return result; } public static void main(String[] args) { List<String> ls = makeList("A"); System.out.println(ls); ls = makeList("A", "B", "C"); System.out.println(ls); ls = makeList("ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("")); System.out.println(ls); } }
输出:
javac GenericVarargs.java
注: GenericVarargs.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[A]
[A, B, C]
[, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
扩展阅读: