• 至少传递一个
1
2
3
4
5
private static <E> void varargs(Object obj,E...varargs){
for(E e : varargs){
System.out.println(e);
}
}
  • 泛型编程只能接受引用类型

  • 打印数组tostring,会导致没有意义的字符结果

  • 可变参数每次调用都会导致有一次数组分配和初始化

  • EnumSet静态工厂最大限度地减少创建枚举集合的成本

1
2
3
4
5
6
7
public static <E extends Enum<E>> EnumSet<E> of(E first, E... rest) {
EnumSet<E> result = noneOf(first.getDeclaringClass());
result.add(first);
for (E e : rest)
result.add(e);
return result;
}
  • Arrays.toString(int[] args)可以打印数组,而不是可变参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package book.rpc.dubbox;

import java.util.Arrays;

public class DubboServer {


public static void main(String[] args) {


varargs(null,new int[]{1,2,3});


Integer[] integers =new Integer[]{4,5,6};
System.out.println(integers);
int[] inta = new int[]{8,9,0};
System.out.println(Arrays.asList(inta));
Integer[] intb = new Integer[]{123};
System.out.println(Arrays.asList(intb));
//可变参数不传递,那么就是空数组
System.out.println(Arrays.asList());
int[] ints =new int[]{88,8,8};
System.out.println(ints);
System.out.println("int arr tostring:"+Arrays.toString(ints));
//null对象,那么就会npe
for(int i : ints){
System.out.println(i);
}
varargs(1,2,3);
varargs();
varargs(null);

}

private static <E> void varargs(Object obj,E...varargs){
for(E e : varargs){
System.out.println(e);
}
}

private static void varargs(int... ints){//可变参数必须放在参数列表的最后
for(int i : ints){
System.out.println(i);
}
}
}