Java可变长参数方法调用问题

不说废话,直接上代码:

 1 package mytest;
 2 
 3 import java.util.List;
 4 
 5 public class TestClass {
 6 
 7     public void method(List<Object> list){
 8         System.out.println("method with param List<Object> invoked!");
 9     }
10     
11     public void method(Object... objects){
12         System.out.println("method with param Object... invoked!");
13     }
14 }
 1 package mytest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Main {
 7 
 8     public static void main(String[] args) {
 9         List<String> list = new ArrayList<String>();
10         list.add("aa");
11         list.add("bb");
12         list.add("cc");
13         
14         TestClass t = new TestClass();
15         
16         t.method(list);
17     }
18 
19 }

main方法执行结果为:

method with param Object... invoked!

为什么重载方法一个参数为List<Object>,一个参数为Object...,调用方法传参类型为List<String>,实际执行的是参数为Object...方法?

泛型问题,如果注释掉Object...方法,则编译报错,不能将List<String>转换为List<Object>。

原文地址:https://www.cnblogs.com/GoQC/p/5750300.html