java重载必须参数不同,无关返回值。
class重载参数相同,返回值类型不同也能通过。
举个例子(1.6)
public class GenericTypes {
public static String method(List<String> list) {
System.out.println("invoke method(List<String> list)");
return "";
}
public static int method(List<Integer> list) {
System.out.println("invoke method(List<Integer> list)");
return 1;
}
public static void main(String[] args) {
method(new ArrayList<String>());
method(new ArrayList<Integer>());
}
}
编译通过,运行成功
invoke method(List<String> list)
invoke method(List<Integer> list)
熟悉泛型的应该知道 List<String> 与 List<Integer> 在编译后是一致的(泛型擦除)
但此例返回值类型一个是int 一个是String,虚拟机认此种重构(参数一致,返回值类型不一致),所以能够执行。
ps:1.7后增加了泛型的编译检查,ide里面就报错了